如何使用 Java (IText API) 在不丢失数字签名的情况下合并 PDF

我有一个数字签名的 pdf 文档,我想使用 java itext api 将此数字签名的 pdf 附加到另一个普通的 pdf,这可能吗?我试图将包含数字签名的 pdf 附加到另一个。我能够合并 pdf,但最终的 pdf 没有在输出 pdf 文件中保留数字签名。是否可以 ?。


呼唤远方
浏览 298回答 3
3回答

慕哥6287543

正如其他人已经说过的,签名背后的想法(至少是想法的主要部分)是确保文件没有改变。另一方面,合并确实会更改文档。因此,合并会破坏签名。但是,另一种方法是使另一个“普通”PDF 成为可移植的集合(一种带有附件的特殊 PDF)并将签名的 PDF 附加到该集合。从集合中打开已签名的 PDF 时,签名将与原始签名 PDF 中一样完好无损。创建可移植集合的示例代码您可以在 iText 站点上找到便携式集合创建的示例:public static final String DEST = "results/collections/portable_collection.pdf";public static final String DATA = "resources/data/united_states.csv";public static final String HELLO = "resources/pdfs/hello.pdf";public static final String IMG = "resources/images/berlin2013.jpg";public void createPdf(String dest) throws IOException, DocumentException {    Document document = new Document();    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));    document.open();    document.add(new Paragraph("Portable collection"));    PdfCollection collection = new PdfCollection(PdfCollection.TILE);    writer.setCollection(collection);    PdfFileSpecification fileSpec = PdfFileSpecification.fileEmbedded(            writer, DATA, "united_states.csv", null);    writer.addFileAttachment("united_states.csv", fileSpec);    fileSpec = PdfFileSpecification.fileEmbedded(            writer, HELLO, "hello.pdf", null);    writer.addFileAttachment("hello.pdf", fileSpec);    fileSpec = PdfFileSpecification.fileEmbedded(            writer, IMG, "berlin2013.jpg", null);    writer.addFileAttachment("berlin2013.jpg", fileSpec);    document.close();}(这里在网站上,在这里他们的GitHub)运行该示例的结果是here。(因为您使用的是 iText 标签而不是 itext7 标签,所以我假设您使用的是 iText 5.5.x 版。)

蝴蝶不菲

这是不可能的,这种数字签名是专门为保护原始文档不被以任何方式修改而设计的。要合并和签署这两个文档,您需要知道用于签名的密钥并为新的合并文档再次生成签名。

噜噜哒

在 Adobe 中打开已签名的 pdf。打开打印对话框 ( Ctrl+ P)将打印机更改为“Microsoft Print to PDF”,然后打印。新创建的 PDF 将具有签名,并将作为合并/合并活动的普通 pdf。注意:此方法将签名文档转换为标准 pdf。结果显示签名信息,但底层数字签名丢失。就我而言,原始签名者理解这种区别。创建摘要文件是我的目标。我将各种数字签名以及其他相关文档合并到一个摘要 pdf 中。原始的、数字签名的文档被存储以备将来参考。我越来越相信,在保留底层数字签名的同时,不可能将数字签名的文档合并成一个单一的摘要 pdf。需要摘要数据包的用户将从我建议的方法中受益。请记住,我的方法在原始数字签名文档可按需提供的范围内仍然“合法有效”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java