在HTML到PDF转换之后,数字签署PDF文档

时间:2014-09-16 12:25:34

标签: digital-signature html-to-pdf

我正在使用Winnovative的HTML to 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服务器导出的数字证书作为我们软件的一部分进行分发。我怎么能这样做?

1 个答案:

答案 0 :(得分: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 support@winnovative-software.com";  
        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();
}