在我的应用程序中,我可以选择签署pdf文件。pdf签名有两个选项,一个是创建新签名,另一个是我需要签署空签名字段。我做了创建新签名字段的部分,它工作正常,现在我在签名空签名字段时遇到了问题。这是我的密码
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null) ;
//ovo smo ubacili
Enumeration en = ks.aliases();
// String alias = (String)en.nextElement();
PrivateKey key = (PrivateKey)ks.getKey(alias, "password".toCharArray());
java.security.cert.Certificate[] chain = ks.getCertificateChain(alias);
//location of pdf document to sign
PdfReader reader = new PdfReader(jTextField1.getText());
String [] delovi=jTextField1.getText().split("\\\\");
String potisaniFajl=delovi[delovi.length-1];
new File(System.getProperty("user.home") + "\\Desktop\\Potpisani Fajlovi\\").mkdirs();
//signed pdf location
FileOutputStream fout = new FileOutputStream(System.getProperty("user.home") + "\\Desktop\\Potpisani Fajlovi\\"+potisaniFajl);
PdfStamper stp = PdfStamper.createSignature(reader, fout, '\0',null,true);
PdfSignatureAppearance appearance = stp.getSignatureAppearance();
appearance.setCrypto(null, chain, null, PdfSignatureAppearance.SELF_SIGNED);
//appearance.setCrypto(key, chain, null,PdfSignatureAppearance.WINCER_SIGNED);
//appearance.setCrypto(null, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
appearance.setReason("Potpis kompenzacije");
appearance.setLocation("Foobar");
//lokacija potpisa
appearance.setVisibleSignature(new Rectangle(100, 100, 200, 200), 1, "dva");
appearance.setExternalDigest(new byte[128], null, "RSA");
appearance.preClose();
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initSign(key);
byte buf[] = new byte[8192];
int n;
InputStream inp = appearance.getRangeStream();
while ((n = inp.read(buf)) > 0) {
signature.update(buf, 0, n);
}
PdfPKCS7 sig = appearance.getSigStandard().getSigner();
sig.setExternalDigest(signature.sign(), null, "RSA");
PdfDictionary dic = new PdfDictionary();
dic.put(PdfName.CONTENTS,new PdfString(sig.getEncodedPKCS1()).setHexWriting(true));
appearance.close(dic);
这段代码添加了一个新的签名,我需要做什么更改来签名空签名字段名“GoodSignature”
签名空签名字段名称“GoodSignature”需要做哪些更改
在当前代码中,您将重载称为PDFSignaturePearance。用于创建新签名字段的setVisibleSignature:
appearance.setVisibleSignature(new Rectangle(100, 100, 200, 200), 1, "dva");
它被记录(JavaDocs)为:
/**
* Sets the signature to be visible. It creates a new visible signature field.
* @param pageRect the position and dimension of the field in the page
* @param page the page to place the field. The fist page is 1
* @param fieldName the field name or <CODE>null</CODE> to generate automatically a new field name
*/
public void setVisibleSignature(Rectangle pageRect, int page, String fieldName)
对于新任务,您必须使用此重载:
/**
* Sets the signature to be visible. An empty signature field with the same name must already exist.
* @param fieldName the existing empty signature field name
*/
public void setVisibleSignature(String fieldName)
在您的情况下,电话是:
appearance.setVisibleSignature("GoodSignature");
尽管如此,我建议您阅读Bruno Lowagie(iText软件)的白皮书《PDF文档的数字签名》。您的代码似乎使用了许多过时的技术,您应该进行更新。
我想做多个签名的pdf文件,像在一个工作流。我正在使用下面的代码签署我写的pdf文件,这工作很好。 签署文件 而且上面的代码工作得很好。我的新要求是添加多个签名。是否有任何方法可以重用此代码段。我经历了这,这,这,但没有运气。 除此之外,我尝试的是,创建了空白多个空白签名,并尝试附加签名。但它导致创建损坏的文件。我还尝试使用本链接中提到的方法创建文件。还对PDF文档进行了很好的文档数字签名 nul
我这里需要帮助,有人能帮我吗?
我正在尝试向现有的数字签名pdf(认证签名)中添加一个空签名字段。 我有一个工作流,其中许多用户将签署该文档(批准签名),该文档创建时带有“n”个空签名字段,每个用户一个,我们的应用程序首先应用一个不可见的认证签名,然后每个用户可以在各自的字段中签署该文档,但由于工作流中意外的更改,其他用户可能希望签名,因此,我们希望添加相应的空签名字段,然后应用签名。 我试图将空字段(带有单元格事件的表)添加到
(和限定变体)可以别名任何内容。和(及其限定变体)是否不受此限制? 换句话说,我已经了解到,如果我不希望char*函数参数别名其他类型的指针参数(因为它们可以别名它们),那么将 应用于 函数参数是一个好主意: 我可以像这样删除有符号和无符号char变体的关键字吗? 同样,指向同一类型的有符号和无符号变体的指针是否可以相互别名?换句话说,如果我期望一个指向int的指针和一个指向unsigned的指针
我使用PdfWriter setEncryption对PDF文档进行了加密/解密。一切正常,解密也正常。 当我为数字签名的PDF文档做同样的事情时,我的数字信息与消息一起损坏(SigDict/Contents非法数据) 是否可以在不影响数字签名信息的情况下加密PDF?
使用itext v5对文档进行数字签名时。5.11 PDF/A-2b文档被破坏——这意味着它们不再作为PDF/A文档有效。违反以下规则:https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Parts-2-and-3-rules#rule-643-1 在上面的链接中,它指定摘要无效,因此我也给你一个代码段,在使用iText