Java 使用Apache PDF Box和现有pfx文件在PDF文件中添加数字签名
我正在使用JAVA在pdf中添加数字签名。我已经为它浏览了很多API。但是我没有任何例子可以直接将现有的pfx文件添加到pdf中 我已尝试使用Apache PdfBox:Java 使用Apache PDF Box和现有pfx文件在PDF文件中添加数字签名,java,apache,digital-signature,pdfbox,pfx,Java,Apache,Digital Signature,Pdfbox,Pfx,我正在使用JAVA在pdf中添加数字签名。我已经为它浏览了很多API。但是我没有任何例子可以直接将现有的pfx文件添加到pdf中 我已尝试使用Apache PdfBox: PDSignature signature = null; File file = new File("path\\REPORT.pdf"); PDDocument doc=PDDocument.load(file); FileInputStream pkcs12Stream = new Fi
PDSignature signature = null;
File file = new File("path\\REPORT.pdf");
PDDocument doc=PDDocument.load(file);
FileInputStream pkcs12Stream = new FileInputStream ("path\\abc.pfx");
KeyStore store = KeyStore.getInstance("PKCS12");
store.load(pkcs12Stream, "pwd@123".toCharArray());
PDSignature sign=new PDSignature();
byte[] bytes = IOUtils.toByteArray(pkcs12Stream);
sign.setContents(bytes);
doc.addSignature(sign); // to add the signature in the pfx file.
FileOutputStream fos = new FileOutputStream("path\\REPORT_signed.pdf");
doc.saveIncremental(fos);
pkcs12Stream.close();
现在,我没有得到任何异常,但它正在生成currapted签名文件,由于下面的状态,该文件将不会加载
doc.addSignature(sign);
因为它不能转换成字节,这是我的假设
是否有任何方法,我可以使用现有的pfx文件,并生成签名的pdf文件
请就此向我提出建议 你用的是什么版本?如果要签名的字节当时不存在,如何添加签名?这个pfx文件来自哪里,它是从什么输入计算出来的?我有一个普通的pdf文件和pfx文件的输入。我已经生成了pfx文件。所以这两个文件是为我输入的。有字节,但它不包含任何值。它不是空的。所以它是空的(“”)。我在pdf中创建了一个数字签名,然后生成了这个pfx文件。现在我想通过Java来完成。doc保存着我的普通pdf文件。一旦我删除doc.addSignature(签名)行。它将生成普通pdf的副本。但每当我尝试添加签名时。我想你误解了PDF签名的工作原理。签名的字节流部分是保存PDF时创建的字节流。请参见此处的第5页:正确的签名方式在源代码下载中的CreateSignature.java示例中。外部签名是可能的(即使在示例中也支持),但需要技巧。绝对不可能先签名,然后再添加该签名。