使用EVOPDF在PDF / A-1b兼容文件中设置PDF文档标题和作者

时间:2015-09-11 07:55:31

标签: c# properties metadata document evopdf

我正在尝试在HTML上设置一些属性 - >使用EVOPDF生成PDF文件。

设置PdfDocumentInfo属性似乎非常简单。如文档所示:http://www.evopdf.com/help/azure-html-to-pdf/html/T_EvoPdf_HtmlToPdfClient_PdfDocumentInfo.htm

但是,Adobe Acrobat Reader在查看File-> Properties时显示空框。 Hex编辑器也找不到任何数据。

我尝试了从这里http://www.evopdf.com/download.aspx下载的“EvoHtmlToPdfDemo_VS2013”​​v6.4解决方案,但在整个解决方案中找不到PdfDocumentInfo。所以没有演示代码来显示应该如何设置文档属性。

请参阅下面的代码

  var converter = new HtmlToPdfConverter();
        converter.ConversionDelay = 0;
        converter.ClipHtmlView = false;

        var paperSize = PaperSizeToSizeF(pPaperSize);
        var pdfPageOrientation = (pIsLandscape) ? PdfPageOrientation.Landscape : PdfPageOrientation.Portrait;
        converter.PdfDocumentOptions.PdfPageOrientation = pdfPageOrientation;
        converter.PdfDocumentOptions.PdfStandardSubset = PdfStandardSubset.Pdf_A_1b;

        //IMPORTANT FOR COMPLIANCE
        converter.PdfDocumentInfo.AuthorName = "Mike de Klerk";
        converter.PdfDocumentInfo.Title = "PDF/A-1b Test";
        converter.PdfDocumentInfo.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library.";
        converter.PdfDocumentInfo.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance";
        converter.PdfDocumentInfo.CreatedDate = DateTime.Now;

修改

使用EvoPdf.Document对象时,我可以完成它。但我无法使用EvoPdf.HtmlToPdfConverter对象完成它。我更喜欢使用后一个对象,因为大多数文档都引用了HtmlToPdfConverter。有关EvoPdf.Document对象的用法,请参阅下面的代码。

        // Create the PDF document where to add the HTML documents
        var pdfDocument = new Document();

        // Set license key received after purchase to use the converter in licensed mode
        // Leave it not set to use the converter in demo mode
        pdfDocument.LicenseKey = LicenseKey;
        pdfDocument.DocumentInformation.Author = "Mike de Klerk";
        pdfDocument.DocumentInformation.Title = "PDF/A-1b Test";
        pdfDocument.DocumentInformation.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library.";
        pdfDocument.DocumentInformation.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance";
        pdfDocument.DocumentInformation.CreationDate = DateTime.Now;

编辑2:

有一个HtmlToPdfConverter.PdfDocumentOptions.DocumentObject.DocumentInformation个对象。但转换前DocumentObject为空。文档说

  

对转换期间转换器初始化的内部Document对象的引用

转换后确实存在

DocumentObject,我可以确认转换后未设置DocumentInformation属性。

编辑3:

在转换前/后转换事件中设置DocumentInformation似乎无法正常工作。

converter.PrepareRenderPdfPageEvent += (eventParams) =>
{
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.Author = "Mike de Klerk";
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.Title = "PDF/A-1b Test";
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library.";
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance";
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.CreationDate = DateTime.Now;
};
converter.AfterRenderPdfPageEvent += (eventParams) =>
{
    eventParams.Page.Document.DocumentInformation.Author = "Mike de Klerk";
    eventParams.Page.Document.DocumentInformation.Title = "PDF/A-1b Test";
    eventParams.Page.Document.DocumentInformation.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library.";
    eventParams.Page.Document.DocumentInformation.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance";
    eventParams.Page.Document.DocumentInformation.CreationDate = DateTime.Now;
};
converter.ConvertHtmlFileToStream(pContentHtmlFile, pOutputStream);

编辑4:

首先转换为Document对象时,甚至不工作,然后设置DocumentInformation,并将Document写入输出流。我觉得我在这里遇到了可能的解决方法......

        var documentObject = converter.ConvertHtmlFileToPdfDocumentObject(pContentHtmlFile);
        documentObject.DocumentInformation.Author = "Mike de Klerk";
        documentObject.DocumentInformation.Title = "PDF/A-1b Test";
        documentObject.DocumentInformation.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library.";
        documentObject.DocumentInformation.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance";
        documentObject.DocumentInformation.CreationDate = DateTime.Now;
        documentObject.Save(pOutputStream);

编辑5:

我假设当一个人documentObject.DocumentInformation.Author = "Value";,并且它有一个setter时,它实际上是设置的。但事实并非如此。因此,在我尝试设置这些值的位置并不重要。他们只是没有被记住。这一定是个bug。为什么还有EvoPdf.DocumentInfoEvoPdf.PdfDocumentInfo类?一个使用AuthorName,另一个使用Author。还有更多这些差异。

2 个答案:

答案 0 :(得分:0)

您无法将EVO HTML生成的PDF文档的制作者更改为PDF Converter。这个属性是只读的。

答案 1 :(得分:0)

问题是您正在创建PDF / A文档。此标准不允许设置作者姓名。