-
Notifications
You must be signed in to change notification settings - Fork 204
/
DigitalSignature.cs
143 lines (112 loc) · 4.94 KB
/
DigitalSignature.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Java.IO;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System.IO;
using Syncfusion.Pdf.Parsing;
using System.Threading.Tasks;
using Syncfusion.Pdf;
using System.Reflection;
using Syncfusion.Pdf.Security;
using Syncfusion.Drawing;
using AndroidX.Core.Content;
namespace SampleBrowser
{
public partial class DigitalSignature : SamplePage
{
private Context m_context;
public override View GetSampleContent(Context con)
{
LinearLayout linear = new LinearLayout(con);
linear.SetBackgroundColor(Android.Graphics.Color.White);
linear.Orientation = Orientation.Vertical;
linear.SetPadding(10, 10, 10, 10);
TextView space = new TextView(con);
space.TextSize = 10;
linear.AddView(space);
TextView text2 = new TextView(con);
text2.TextSize = 17;
text2.TextAlignment = TextAlignment.Center;
text2.Text = "This sample demonstrates how a PDF document can be secured with certificates and signed with either standard or author signatures. Now added the support for Elliptic Curve Digital Signature Algorithm (ECDSA) to sign the PDF document.";
text2.SetTextColor(Android.Graphics.Color.ParseColor("#262626"));
text2.SetPadding(5, 5, 5, 5);
linear.AddView(text2);
TextView space1 = new TextView(con);
space1.TextSize = 10;
linear.AddView(space1);
m_context = con;
TextView space2 = new TextView(con);
space2.TextSize = 10;
linear.AddView(space2);
Button button1 = new Button(con);
button1.Text = "Sign and Email";
button1.Click += OnButtonClicked;
linear.AddView(button1);
return linear;
}
void OnButtonClicked(object sender, EventArgs e)
{
//Get the stream from the document.
Stream docStream = typeof(Booklet).GetTypeInfo().Assembly.GetManifestResourceStream("SampleBrowser.Samples.PDF.Assets.SalesOrderDetail.pdf");
//Load the PDF document into the loaded document object.
PdfLoadedDocument loadedDocument = new PdfLoadedDocument(docStream);
//Get the certificate stream from .pfx file.
Stream certificateStream = typeof(DigitalSignature).GetTypeInfo().Assembly.GetManifestResourceStream("SampleBrowser.Samples.PDF.Assets.PDF.pfx");
//Create PdfCertificate using certificate stream and password.
PdfCertificate pdfCert = new PdfCertificate(certificateStream, "syncfusion");
//Add certificate to document first page.
PdfSignature signature = new PdfSignature(loadedDocument, loadedDocument.Pages[0], pdfCert, "Signature");
signature.Bounds = new RectangleF(5, 5, 300, 300);
MemoryStream stream = new MemoryStream();
//Save the PDF document
loadedDocument.Save(stream);
//Close the PDF document
loadedDocument.Close(true);
if (stream != null)
{
stream.Position=0;
ComposeMail("DigitalSignature.pdf", null, "Signing the document", "Syncfusion", stream);
}
}
public void ComposeMail(string fileName, string[] recipients, string subject, string messagebody, MemoryStream filestream)
{
string exception = string.Empty;
string root = null;
if (Android.OS.Environment.IsExternalStorageEmulated)
{
root = Android.OS.Environment.ExternalStorageDirectory.ToString();
}
else
root = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
Java.IO.File myDir = new Java.IO.File(root + "/Syncfusion");
myDir.Mkdir();
Java.IO.File file = new Java.IO.File(myDir, fileName);
if (file.Exists()) file.Delete();
try
{
FileOutputStream outs = new FileOutputStream(file);
outs.Write(filestream.ToArray());
outs.Flush();
outs.Close();
}
catch (Exception e)
{
exception = e.ToString();
}
Intent email = new Intent(Android.Content.Intent.ActionSend);
var uri = FileProvider.GetUriForFile(this.m_context, Application.Context.PackageName + ".provider", file);
//file.SetReadable(true, true);
email.PutExtra(Android.Content.Intent.ExtraSubject, subject);
email.PutExtra(Intent.ExtraStream, uri);
email.SetType("application/pdf");
MainActivity.BaseActivity.StartActivity(email);
}
}
}