【发布时间】:2014-12-04 12:00:48
【问题描述】:
我正在使用 iTextSharp 5.5.1 以使用分离签名(从第三方机构获得)对 PDF 文件进行数字签名。一切似乎都很好,文件是有效的,例如Adobe Reader 报告没有问题,将签名显示为有效等。
问题是 Java 客户端显然对这些文件有一些问题 - 该文件既无法打开也无法解析。
这些文件在标题中有一个字节顺序标记,这似乎导致了这种行为 (\x00EF\x00BB\x00BF)。
我可以像这样识别 BOM:
PdfReader reader = new PdfReader(path);
byte[] metadata = reader.Metadata;
// metadata[0], metadata[1], metadata[2] contain the BOM
如何删除 BOM(不丢失签名的有效性),或强制 iTextSharp 库不将这些字节附加到文件中?
【问题讨论】:
-
我刚刚检查过,iTextSharp 并没有自己添加 BOM。要么是原始 PDF 在签名之前就有它们,要么你在某个时候添加了 BOM。
-
元数据(嵌入在 PDF 文件中的某处)通常有一个 BOM,这没关系。 问题是 Java 客户端显然对这些文件有一些问题 - 哪些 Java 客户端?
-
@mkl:首先,InputStream 读取字节数组,然后 XMLPullParse (android) 在解析 xml 时抛出 XmlPullParserException。使用 BOMInputStream 从字符串中删除 BOM,因此 XMLPullParser 可以在任何情况下读取它。但我的要求是没有BOM的原始文件。
-
我快速浏览了 iTextSharp 源代码,但找不到添加 BOM 的代码。要重现您的问题,您能否在 iTextSharp 应用程序签名前后共享 PDF?此外,您说您使用的是 iTextSharp 5.3.1; iTextSharp 存储库中没有该版本的标签,并且 SourceForge 上没有 5.3.1 发布文件夹。因此,看起来从未有过正式的 5.3.1 版本,或者由于某种原因已被撤销。您可能想要更新。
-
好的,我正在查看文件。顺便说一句,您不仅要签名,还要加密文件。 不加密元数据不是最好的吗?这将允许支持 XMP 但不支持 PDF 的软件访问它们。有一个不加密元数据的加密选项。
标签: c# pdf itextsharp digital-signature byte-order-mark