在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
对象。我更喜欢使用后一个对象,因为大多数文档都提到了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.DocumentInfo
和EvoPdf.PdfDocumentInfo
课程?一个使用AuthorName
,另一个使用Author
。还有更多的不同
您不能将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文档。这个标准不允许设置作者姓名。