Aspose PDF Java的PdfFileSignature设置权限未生效。

huangapple go评论81阅读模式
英文:

Aspose pdf java PdfFileSignature setAuthority not working

问题

以下是翻译好的内容:

我正在尝试使用 Aspose PDF for Java 来对文档进行数字签名。这是我的代码:

public ByteArrayOutputStream signDocument(Document doc, String signedBy) throws Exception {

        PdfFileSignature pdfSignSingle = new PdfFileSignature();
        pdfSignSingle.bindPdf(doc);
        pdfSignSingle.setCertificate(prop.getSigningKeyStorePath(), prop.getKeystorePassword());
        PKCS7 signature = new PKCS7(prop.getSigningKeyStorePath(), prop.getKeystorePassword());
        pdfSignSingle.setSignatureAppearance(prop.getSimploudLogo());

        signature.setAuthority("Authority");
        signature.setDate(new Date());
        signature.setContactInfo("email");
        signature.setLocation("Location");
        signature.setReason("reason");
        pdfSignSingle.sign(1, true, new java.awt.Rectangle(100, 100, 200, 200), signature);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        pdfSignSingle.save(baos);
        pdfSignSingle.dispose();
        doc.dispose();
        return baos;
    }

图片 中展示了数字签名在 Adobe Reader 中的样式。

Aspose PDF Java的PdfFileSignature设置权限未生效。

正如您所看到的,图像和 Authority 都没有显示出来。我尝试过将图像保存为 PDF 和 PNG 格式。我还尝试过将图像大小调整为小于矩形区域。至于 Authority,我确实希望它是可定制的,这样图片中第一行的文本可以是 "由 'customParameter' 签名"。

英文:

I'm trying to use Aspose pdf java to digitally sign a document. This is my code

public ByteArrayOutputStream signDocument(Document doc, String signedBy) throws Exception {

        PdfFileSignature pdfSignSingle = new PdfFileSignature();
        pdfSignSingle.bindPdf(doc);
        pdfSignSingle.setCertificate(prop.getSigningKeyStorePath(), prop.getKeystorePassword());
        PKCS7 signature = new PKCS7(prop.getSigningKeyStorePath(), prop.getKeystorePassword());
        pdfSignSingle.setSignatureAppearance(prop.getSimploudLogo());

        signature.setAuthority("Authority");
        signature.setDate(new Date());
        signature.setContactInfo("email");
        signature.setLocation("Location");
        signature.setReason("reason");
        pdfSignSingle.sign(1, true, new java.awt.Rectangle(100, 100, 200, 200), signature);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        pdfSignSingle.save(baos);
        pdfSignSingle.dispose();
        doc.dispose();
        return baos;
    }

In picture is shown how the signature looks in adobeReader.

Aspose PDF Java的PdfFileSignature设置权限未生效。

As you can see both image and Authority are not shown. I tried image to be both in pdf and png format. I've also tried to make it smaller then Rectangle area. As for authority i really need it to be customizable so that text in first line in picture can be
Signed by "customParameter"

答案1

得分: 1

该API提供了另一个类,即SignatureCustomAppearance,可以进一步用于设置签名的属性,如DateSigned、Reason、Location等。请查看以下完整的代码片段,它可以满足您的要求:

String inputFile = "doc.pdf";
String outSignedFile = "out_20.9.pdf";
// 创建PdfFileSignature实例
com.aspose.pdf.facades.PdfFileSignature pdfSignSingle = new com.aspose.pdf.facades.PdfFileSignature();
// 通过读取流的内容绑定源PDF
pdfSignSingle.bindPdf(inputFile);

PKCS7 pkcs = new PKCS7("mykey2.pfx", "pass");
pkcs.setAuthority("Authority");
pkcs.setDate(new Date());
pkcs.setContactInfo("email");
pkcs.setLocation("Location");
pkcs.setReason("reason");
pkcs.setImage(new FileInputStream("simpleLogo.png"));

SignatureCustomAppearance sca = new SignatureCustomAppearance();
sca.setDateSignedAtLabel(null);
sca.setDigitalSignedLabel(null);
sca.setShowReason(true);
sca.setShowLocation(true);
sca.setShowContactInfo(true);

pkcs.setCustomAppearance(sca);

pdfSignSingle.sign(1, true, new java.awt.Rectangle(100, 100, 200, 200), pkcs);
// 为签名外观设置图像
// pdfSignSingle.setSignatureAppearance("simpleLogo.png");
// 保存最终输出
pdfSignSingle.save(outSignedFile);

正如在问题下方的评论中所提到的,同样的问题也在Aspose.PDF官方论坛中发布过,链接为"Aspose pdf java PdfFileSignature setAuthority not working",并且那里也提供了解决方案。

英文:

The API offers another Class i.e. SignatureCustomAppearance which can further be used to set such properties for a signature such as DateSigned, Reason, Location, etc. Please check the following complete code snippet which can fulfill your requirements:

String inputFile = "doc.pdf";
String outSignedFile = "out_20.9.pdf";
// Create PdfFileSignature instance
com.aspose.pdf.facades.PdfFileSignature pdfSignSingle = new com.aspose.pdf.facades.PdfFileSignature();
// Bind the source PDF by reading contents of Stream
pdfSignSingle.bindPdf(inputFile);

PKCS7 pkcs = new PKCS7("mykey2.pfx", "pass");
pkcs.setAuthority("Authority");
pkcs.setDate(new Date());
pkcs.setContactInfo("email");
pkcs.setLocation("Location");
pkcs.setReason("reason");
pkcs.setImage(new FileInputStream("simpleLogo.png"));

SignatureCustomAppearance sca = new SignatureCustomAppearance();
sca.setDateSignedAtLabel(null);
sca.setDigitalSignedLabel(null);
sca.setShowReason(true);
sca.setShowLocation(true);
sca.setShowContactInfo(true);

pkcs.setCustomAppearance(sca);

pdfSignSingle.sign(1, true, new java.awt.Rectangle(100, 100, 200, 200), pkcs);
// Set image for signature appearance
//pdfSignSingle.setSignatureAppearance("simpleLogo.png");
// Save final output
pdfSignSingle.save(outSignedFile);

As mentioned in the comment below the question, the same inquiry was posted in Aspose.PDF official forum as well at "Aspose pdf java PdfFileSignature setAuthority not working" and a solution has also been provided there.

huangapple
  • 本文由 发表于 2020年10月9日 17:05:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/64276962.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定