【发布时间】:2018-09-03 11:07:22
【问题描述】:
我希望是一个简单的问题。 我正在尝试使用 iTextSharp 修改一些 PDF 文件,但是似乎 iTextSharp 放在文件末尾的 XMP 元数据正在破坏 PDF 文件的布局(而且我对 PDF 格式不太熟悉完全理解为什么)。
您可以从上面的两个图像中看到文档似乎已经旋转。然而,从将 PDF 文件视为二进制差异来看,唯一不同的似乎是文件末尾的一些 XMP 元数据
我尝试在几个 PDF 查看器(Sumatra PDF、Edge Browser 和 Adobe Acrobat)中打开文件,都显示出同样的怪异。
我想我有两个问题: a) PDF 文件如何从文件末尾仅包含 XMP 元数据进行如此更改? b) 如何使 iTextSharp 不产生此输出? (iTextSharp 似乎只在我添加/编辑内容时执行此操作,而不是在我仅删除 Javascript 或类似内容时执行此操作)
我用于 iTextSharp 的代码是此处帖子中的 PdfContentStreamEditor(逐字):https://stackoverflow.com/a/35915789/2535822
编辑 1>
好的..它似乎不是 XMP 元数据。我通过使用摆脱了它:
pdfStamper.XmpMetadata = new byte[0];
但是文件末尾还有一堆额外的数据
2 0 obj
<</Producer(PDFCreator 2.5.2.5233; modified using iTextSharp’ 5.5.13 ©2000-2018 iText Group NV \(AGPL-version\))/CreationDate(D:20171206173510+10'30')/ModDate(D:20180325144710+11'00')/Title(þÿ
endobj
404 0 obj
<</Length 0/Type/Metadata/Subtype/XML>>stream
endstream
endobj
405 0 obj
<</Length 3638/Filter/FlateDecode>>stream
xœÍZmÅ/6ÒZ2ÁÆ€
....
编辑 2>
【问题讨论】:
-
我的
PdfContentStreamEditor班级可能有问题。不过,为了验证我需要有问题的 PDF。 -
我有另一个 PDF,在输入代码时似乎也显示出“怪异”。我可以发送这个,因为它不包含我们的任何特权公司信息。如何最好地发送给您?我确实查看了 Adobe PDF 规范,因为我对 Write 方法在输出中放置一个空格/换行符感到惊讶(我期待一个完整的 1:1 写入)......但它似乎是有效的(尽管,如注意,我对PDF格式一无所知)
-
如果其中没有特权信息,您可以简单地通过例如共享文件。公开的 Google 云端硬盘或投递箱共享。
-
这里既是原件,又是通过 PdfContentStreamEditor 处理的(没有任何应该进行的编辑)。我只在第一页进行了 EditContent 调用,因此其他页面仍然正常。 drive.google.com/open?id=1KSXgoPgkUX9atCPQXDcx86T30xLBgJYJ
-
您共享的文件似乎具有在某些情况下覆盖带有注释的页面的功能。此类功能可能对文档更改非常敏感。我会在接下来的几天里尝试更好地理解这个功能。
标签: c# pdf itext pdf-generation pdfstamper