डेवएक्सप्रेस या किसी अन्य चीज़ का उपयोग करके क्या मैं एक पृष्ठ में विभिन्न स्थानों पर दृश्यमान रूप में कई हस्ताक्षरकर्ताओं के कई डिजिटल हस्ताक्षरों के साथ एक पीडीएफ फाइल पर हस्ताक्षर कर सकता हूं?
कृपया मेरा नमूना कोड देखें। यह केवल एक डिजिटल हस्ताक्षर के लिए काम कर रहा है और हस्ताक्षर का दृश्य रूप नहीं दिखा रहा है।
[C#]
#region #export
private void Export() {
XtraReport1 report = new XtraReport1();
// Create a new X509Certificate2 object.
X509Certificate2 certificate = new X509Certificate2();
// Initialize a local certificate storage and define its options.
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
// Initialize a certificate collection and adjust its work.
X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
//X509Certificate2Collection fcollection =
// (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, true);
//X509Certificate2Collection scollection =
// X509Certificate2UI.SelectFromCollection(fcollection, "Test Certificate Select",
// "Select a certificate from the following list to get information on that certificate",
// X509SelectionFlag.SingleSelection);
//if(scollection.Count > 0)
// certificate = scollection[0];
certificate = collection[1];
// Define the remaining PDF signature options.
report.ExportOptions.Pdf.SignatureOptions.ContactInfo = "contact info";
report.ExportOptions.Pdf.SignatureOptions.Location = "location";
report.ExportOptions.Pdf.SignatureOptions.Reason = "reason";
// Assign the created certificate to the signature options of the PDF export options.
report.ExportOptions.Pdf.SignatureOptions.Certificate = certificate;
// Export the report to a PDF file
// created in the same folder where the application's .exe file is located.
report.ExportToPdf("test.pdf");
}
#endregion #export
कृपया इस कोड को देखें जिसका उपयोग मैं C# iText Sharp . के मामले में कर रहा हूं
public string DigiSigTest(string src, string dest, X509Certificate2 pk, string reason, string location, string test_path, string WatermarkLocation, string PageNo, string PdfPassword, string SignPos, string[] Custm, string TokenPin, string[] SignImgLoc, string SignImgPath, string Printdocpath, string[] PrintPageNo)
{
PdfReader reader1 = (PdfReader)null;
PdfReader pdfReader = (PdfReader)null;
PdfStamper pdfStamper1 = (PdfStamper)null;
PdfStamper pdfStamper2 = (PdfStamper)null;
PdfReader reader2 = (PdfReader)null;
MemoryStream memoryStream1 = new MemoryStream();
MemoryStream memoryStream2 = new MemoryStream();
try
{
string str1 = src;
pdfReader = new PdfReader(src);
int num1 = 1;
int numberOfPages = pdfReader.NumberOfPages;
pdfReader.Close();
int num2 = 0;
int Width = 0;
int num3 = 0;
int Height = 0;
if ((uint)SignImgLoc.Length > 0U)
{
num2 = (int)Convert.ToDecimal(SignImgLoc[0]);
int num4 = (int)Convert.ToDecimal(SignImgLoc[1]);
int num5 = (int)Convert.ToDecimal(SignImgLoc[2]);
int num6 = (int)Convert.ToDecimal(SignImgLoc[3]);
Width = Math.Abs(num5 - num2);
Height = Math.Abs(num6 - num4);
num3 = num4 - Height;
}
if (DigiSign.IsPasswordProtected(str1))
{
byte[] bytes = Encoding.ASCII.GetBytes(PdfPassword);
pdfReader = new PdfReader(str1, bytes);
}
else
pdfReader = new PdfReader(str1);
Rectangle rect = new Rectangle((float)(int)Convert.ToDecimal(Custm[0]), (float)(int)Convert.ToDecimal(Custm[1]), (float)(int)Convert.ToDecimal(Custm[2]), (float)(int)Convert.ToDecimal(Custm[3]));
string str2 = test_path + "/pdf/" + System.IO.Path.GetFileName(dest);
PdfReader.unethicalreading = true;
if (DigiSign.IsPasswordProtected(str1))
{
byte[] bytes = Encoding.ASCII.GetBytes(PdfPassword);
reader1 = new PdfReader(str1, bytes);
}
else
reader1 = new PdfReader(str1);
pdfStamper1 = new PdfStamper(reader1, (Stream)memoryStream1, char.MinValue, true);
PdfFormField signature = PdfFormField.CreateSignature(pdfStamper1.Writer);
signature.SetWidget(rect, (PdfName)null);
signature.Flags = 4;
signature.FieldName = "Signature";
signature.SetPage();
for (int index = num1; index <= numberOfPages; ++index)
{
pdfStamper1.AddAnnotation((PdfAnnotation)signature, index);
if (PageNo == "FL")
{
pdfStamper1.AddAnnotation((PdfAnnotation)signature, numberOfPages);
break;
}
}
pdfStamper1.Close();
reader1.Close();
File.WriteAllBytes(str2, memoryStream1.ToArray());
memoryStream1.Close();
if (TokenPin.Trim() != "")
{
SecureString securePin = this.GetSecurePin(TokenPin);
RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider)pk.PrivateKey;
RSACryptoServiceProvider cryptoServiceProvider = new RSACryptoServiceProvider(new CspParameters(1, privateKey.CspKeyContainerInfo.ProviderName, privateKey.CspKeyContainerInfo.KeyContainerName, new CryptoKeySecurity(), securePin));
}
if (DigiSign.IsPasswordProtected(str2))
{
byte[] bytes = Encoding.ASCII.GetBytes(PdfPassword);
reader2 = new PdfReader(str2, bytes);
}
else
reader2 = new PdfReader(str2);
pdfStamper2 = PdfStamper.CreateSignature(reader2, (Stream)memoryStream2, char.MinValue, null, true);
PdfSignatureAppearance signatureAppearance = pdfStamper2.SignatureAppearance;
if (reason.Trim() != "")
signatureAppearance.Reason = reason;
if (location.Trim() != "")
signatureAppearance.Location = location;
signatureAppearance.CertificationLevel = 0;
signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
signatureAppearance.Acro6Layers = false;
signatureAppearance.SetVisibleSignature("Signature");
if ((uint)SignImgLoc.Length > 0U)
{
Image image = DigiSign.resizeImage(Width, Height, SignImgPath);
image.SetAbsolutePosition((float)num2, (float)num3);
for (int pageNum = num1; pageNum <= numberOfPages; ++pageNum)
{
pdfStamper2.GetOverContent(pageNum).AddImage(image);
if (PageNo == "FL")
{
pdfStamper2.GetOverContent(numberOfPages).AddImage(image);
break;
}
}
}
List<Org.BouncyCastle.X509.X509Certificate> x509CertificateList = new List<Org.BouncyCastle.X509.X509Certificate>()
{
DotNetUtilities.FromX509Certificate((System.Security.Cryptography.X509Certificates.X509Certificate) pk)
};
IExternalSignature externalSignature = (IExternalSignature)new X509Certificate2Signature(pk, "SHA-256");
MakeSignature.SignDetached(signatureAppearance, externalSignature, (ICollection<Org.BouncyCastle.X509.X509Certificate>)x509CertificateList, (ICollection<ICrlClient>)null, (IOcspClient)null, (ITSAClient)null, 0, CryptoStandard.CMS);
File.WriteAllBytes(dest, memoryStream2.ToArray());
File.Delete(str2);
pdfStamper2.Close();
reader2.Close();
return "SUCCESS";
}
catch (Exception ex)
{
return ex.Message;
}
finally
{
if (pdfStamper1 != null)
pdfStamper1.Close();
if (pdfStamper2 != null)
pdfStamper2.Close();
if (reader1 != null)
reader1.Close();
if (reader2 != null)
reader2.Close();
if (memoryStream1 != null)
memoryStream1.Close();
if (memoryStream2 != null)
memoryStream2.Close();
if (pdfReader != null)
pdfReader.Close();
}
}
1 उत्तर
एमकेएल के अनुसार, मैंने प्रतिस्थापित किया है
signature.FieldName = "Signature";
प्रति
signature.FieldName = (pk.GetNameInfo(X509NameType.SimpleName, false)).Replace(' ', '_');
तथा
signatureAppearance.SetVisibleSignature("Signature1");
प्रति
signatureAppearance.SetVisibleSignature((pk.GetNameInfo(X509NameType.SimpleName, false)).Replace(' ', '_'));
धन्यवाद एमकेएल।
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।