2014-09-16 7 views
0

Я использую инструмент преобразования HTML в PDF из Winnovative, чтобы преобразовать HTML в PDF с оглавлением. Я сделал это, используя код ниже:Цифровая подпись PDF-документа, полученного после преобразования HTML в PDF

// Create a HTML to PDF converter object with default settings 
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); 

// Enable the creation of a table of contents from H1 to H6 tags found in HTML 
htmlToPdfConverter.TableOfContentsOptions.AutoTocItemsEnabled = autoTableOfContentsCheckBox.Checked; 

// Convert the HTML page to a PDF document in a memory buffer 
byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtmlToPdf(myBookHtml, baseUrl); 

Это работает очень хорошо, но требование также подписать PDF документ, который будет распространен как часть нашего программного обеспечения с использованием цифрового сертификата можно экспортировать с нашего сервера IIS. Как я могу это сделать?

+0

На .NET вы можете использовать IText (смотреть лицензию!) Или пакет PDFBlackbox нашего SecureBlackbox продукта. –

ответ

0

Во-первых, из IIS вам необходимо экспортировать сертификат, содержащий как личные, так и открытые ключи в защищенном паролем файле PFX. Вы можете использовать, чтобы подать подписать созданный PDF-документ, используя следующий код:

// Create a HTML to PDF converter object with default settings 
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); 

htmlToPdfConverter.TableOfContentsOptions.AutoTocItemsEnabled = true; 

Document pdfDocument = null; 
try 
{ 
    string htmlWithDigitalSignatureMarker = htmlStringTextBox.Text; 
    string baseUrl = baseUrlTextBox.Text; 

    // Convert a HTML string with a marker for digital signature to a PDF document object 
    pdfDocument = htmlToPdfConverter.ConvertHtmlToPdfDocumentObject(htmlWithDigitalSignatureMarker, baseUrl); 

    // Make the HTML element with 'digital_signature_element' mapping ID a link to digital signature properties 
    HtmlElementMapping digitalSignatureMapping = htmlToPdfConverter.HtmlElementsMappingOptions.HtmlElementsMappingResult.GetElementByMappingId("digital_signature_element"); 
    if (digitalSignatureMapping != null) 
    { 
     PdfPage digitalSignaturePage = digitalSignatureMapping.PdfRectangles[0].PdfPage; 
     RectangleF digitalSignatureRectangle = digitalSignatureMapping.PdfRectangles[0].Rectangle; 

     string certificateFilePath = Server.MapPath("~/DemoAppFiles/Input/Certificates/wnvpdf.pfx"); 

     // Get the certificate from password protected PFX file 
     DigitalCertificatesCollection certificates = DigitalCertificatesStore.GetCertificates(certificateFilePath, "wnvpdf"); 
     DigitalCertificate certificate = certificates[0]; 

     // Create the digital signature 
     DigitalSignatureElement signature = new DigitalSignatureElement(digitalSignatureRectangle, certificate); 
     signature.Reason = "Protect the document from unwanted changes"; 
     signature.ContactInfo = "The contact email is [email protected]"; 
     signature.Location = "Development server"; 
     digitalSignaturePage.AddElement(signature); 
    } 

    // Save the PDF document in a memory buffer 
    byte[] outPdfBuffer = pdfDocument.Save(); 

} 
finally 
{ 
    // Close the PDF document 
    if (pdfDocument != null) 
     pdfDocument.Close(); 
} 
+0

Мне пришлось внести некоторые изменения в ваш код, чтобы сделать всю первую страницу PDF ссылкой на свойства подписей, но это в основном хороший ответ на мой вопрос. Благодаря !!! :-) – 2014-09-17 04:59:22