3 回答
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 版。)
TA贡献1810条经验 获得超4个赞
这是不可能的,这种数字签名是专门为保护原始文档不被以任何方式修改而设计的。
要合并和签署这两个文档,您需要知道用于签名的密钥并为新的合并文档再次生成签名。
TA贡献1784条经验 获得超7个赞
在 Adobe 中打开已签名的 pdf。
打开打印对话框 ( Ctrl+ P)
将打印机更改为“Microsoft Print to PDF”,然后打印。
新创建的 PDF 将具有签名,并将作为合并/合并活动的普通 pdf。
注意:此方法将签名文档转换为标准 pdf。结果显示签名信息,但底层数字签名丢失。就我而言,原始签名者理解这种区别。
创建摘要文件是我的目标。我将各种数字签名以及其他相关文档合并到一个摘要 pdf 中。原始的、数字签名的文档被存储以备将来参考。我越来越相信,在保留底层数字签名的同时,不可能将数字签名的文档合并成一个单一的摘要 pdf。
需要摘要数据包的用户将从我建议的方法中受益。请记住,我的方法在原始数字签名文档可按需提供的范围内仍然“合法有效”。
添加回答
举报