c# - 如何在不更改元数据的情况下创建新的 PDF?
问题描述
我有 Apache FOP 1.0 创建的原始 PDF 文件,其中包含 Apache 添加的基本元数据(生产者,创建日期)。我正在编辑文件,并且出现了我不想拥有的其他元数据(修改日期和其他)。是否可以基于以没有编辑残留物的方式编辑的文件创建新文件?
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c016 91.163616, 2018/10/29-16:58:49 ">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<pdf:PDFVersion>1.4</pdf:PDFVersion>
<pdf:Producer>Apache FOP Version 1.0</pdf:Producer>
<xmp:CreateDate>2019-08-20T11:09:15+02:00</xmp:CreateDate>
<xmp:CreatorTool>Apache FOP Version 1.0</xmp:CreatorTool>
<xmp:MetadataDate>2019-08-20T11:09:15+02:00</xmp:MetadataDate>
<dc:date>
<rdf:Seq>
<rdf:li>2019-08-20T11:09:15+02:00</rdf:li>
</rdf:Seq>
</dc:date>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>
除了元数据,还有可能通过删除记事本++中添加的行来恢复原始版本(我不想要),我试图替换流,但我失败了(编辑和新的元数据被添加到文件,他们不会更改旧文本(增量更新?))。我希望编辑后的文件看起来像在 Apache FOP 1.0 中制作的原始文件。我尝试使用 Word2FO.xsl 创建 XSL-FO,但无法创建外观与原始文件相同的文件。
我可以为 C# 使用窗口应用程序 (Windows)、控制台、网站或其他东西,到目前为止,我发现的所有东西要么效果不佳,要么在我自己之后添加纪念品(水印、生产者变更、额外的增量更新等)。
解决方案
我们的 DynamicPDF Merger 产品允许您在不更改其内容的情况下合并 PDF。还有一些选项可以抑制 XMP 元数据或根据需要设置生产者。下面是合并 PDF、删除 XMP 元数据(使用 MergeOptions 类)和设置生产者的 C# 代码。
MergeOptions options = new MergeOptions();
options.XmpMetadata = false;
MergeDocument document = new MergeDocument(@"Source PDF file path", options);
document.Producer = "My producer";
document.Draw(@"path to save the output PDF");
您可以在此处参考 MergeOptions 类的文档:http: //docs.dynamicpdf.com/NET_Help_Library_19_08/DynamicPDF~ceTe.DynamicPDF.Merger.MergeOptions_members.html
在 Nuget(包 ID:ceTe.DynamicPDF.CoreSuite.NET)上提供了 DynamicPDF Merger 产品的全功能评估版: https ://www.nuget.org/packages/ceTe.DynamicPDF.CoreSuite.NET/
更多信息和从我们的网站下载的选项可以在这里找到: https ://www.dynamicpdf.com/Merge-PDF-.NET.aspx
推荐阅读
- java - 为什么这个使用多个构造函数的 Java 代码在 VS 代码中运行但不能用 javac 编译?
- c - 内存中的位镜像
- python - 如果字符串和相关的 int 相等,则赋值
- python - 生成文本文件的多个问题
- ios - 从心电图中获取症状
- google-chrome - 刷新窗口后,如何指示浏览器在请求中包含 cookie?
- haskell - 我们如何在 Haskell 中建立明确的类别?
- node.js - React-Native IOS: Background-Timer doesnt run in the Background
- bash - Best way to insert different lines of text from one file into a particular line into a group of files
- azure - 为一组用户/组隐藏 Azure 应用程序