为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼唤远方 2021-12-01 16:26:10
我有一个数字签名的 pdf 文档,我想使用 java itext api 将此数字签名的 pdf 附加到另一个普通的 pdf,这可能吗?我试图将包含数字签名的 pdf 附加到另一个。我能够合并 pdf,但最终的 pdf 没有在输出 pdf 文件中保留数字签名。是否可以 ?。
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

正如其他人已经说过的,签名背后的想法(至少是想法的主要部分)是确保文件没有改变。另一方面,合并确实会更改文档。因此,合并会破坏签名。


但是,另一种方法是使另一个“普通”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 版。)


查看完整回答
反对 回复 2021-12-01
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

这是不可能的,这种数字签名是专门为保护原始文档不被以任何方式修改而设计的。

要合并和签署这两个文档,您需要知道用于签名的密钥并为新的合并文档再次生成签名。


查看完整回答
反对 回复 2021-12-01
?
噜噜哒

TA贡献1784条经验 获得超7个赞

  1. 在 Adobe 中打开已签名的 pdf。

  2. 打开打印对话框 ( CtrlP)

  3. 将打印机更改为“Microsoft Print to PDF”,然后打印。

  4. 新创建的 PDF 将具有签名,并将作为合并/合并活动的普通 pdf。

//img1.sycdn.imooc.com//61a731cc0001cbf608060435.jpg

注意:此方法将签名文档转换为标准 pdf。结果显示签名信息,但底层数字签名丢失。就我而言,原始签名者理解这种区别。

创建摘要文件是我的目标。我将各种数字签名以及其他相关文档合并到一个摘要 pdf 中。原始的、数字签名的文档被存储以备将来参考。我越来越相信,在保留底层数字签名的同时,不可能将数字签名的文档合并成一个单一的摘要 pdf。

需要摘要数据包的用户将从我建议的方法中受益。请记住,我的方法在原始数字签名文档可按需提供的范围内仍然“合法有效”。


查看完整回答
反对 回复 2021-12-01
  • 3 回答
  • 0 关注
  • 297 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信