当前位置: 首页 > 知识库问答 >
问题:

Itext符号空签名字段

有玄天
2023-03-14

在我的应用程序中,我可以选择签署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”

共有1个答案

隆宏爽
2023-03-14

签名空签名字段名称“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