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

本文关键字:PDF 设置 EVOPDF 文档 标题 -1b 文件 | 更新日期: 2023-09-27 18:12:11

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

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

但是,在查看文件->属性时,adobeacrobatreader显示空框。而十六进制编辑器也找不到任何数据。

我尝试了"EvoHtmlToPdfDemo_VS2013"v6.4解决方案,我从这里下载http://www.evopdf.com/download.aspx,但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对象。我更喜欢使用后一个对象,因为大多数文档都提到了HtmlToPdfConverterEvoPdf.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。还有更多的不同

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

您不能将EVO HTML生成的PDF文档的生产者更改为PDF转换器。

元数据,如作者、标题等,应该以PDF/a -1b兼容的PDF格式写入XMP流。参见PDF/A

中的XMP元数据

EvoPdf将元数据写入非XMP流。因此,生成一个PDf/a -1b兼容的文件,并添加(非xmp流)元数据将导致一个不符合PDf/a -1b的文件。因此,元数据根本不写入,以保持文件兼容。

有一个Adobe XMP工具包,可以帮助您实现添加元数据到PDF/a -1b兼容的文件生成的EvoPdf。但我不知道是否有可能在生成EvoPdf期间对文件进行签名和/或密码保护。

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