gpt4 book ai didi

java - iText 签名表单字段内容未打印在纸上

转载 作者:行者123 更新时间:2023-12-02 02:18:32 27 4
gpt4 key购买 nike

我有一个使用 iText 5.5.9 将签名字段添加到 PDF 单元格的方法。

private static void addSignatureFieldToCell(String fieldname, PdfPCell pdfPCell, PdfWriter pdfWriter) {
PdfFormField digitalSignatureField = PdfFormField.createSignature(pdfWriter);
// If the PDF is not signed we don't show anything
digitalSignatureField.setWidget(new Rectangle(0, 0, 0, 0), PdfAnnotation.HIGHLIGHT_NONE);
digitalSignatureField.setFieldName(fieldname);
// With this flag the field is shown on Acrobat
digitalSignatureField.setFieldFlags(PdfAnnotation.FLAGS_PRINT);
// This allows to show the signature on the signatures panel at the left
digitalSignatureField.setPage();

pdfWriter.addAnnotation(digitalSignatureField);
// This is the event attached to the cell that tells the writer to fill the field with the signature data
FieldPositioningEvents fieldPositioningEvents = new FieldPositioningEvents(pdfWriter, digitalSignatureField);
pdfPCell.setCellEvent(fieldPositioningEvents);
}

这工作正常。经过一些步骤后,数字签名的信息就出现在 PDF 上。我打开 Acrobat Reader,可以看到经过数字签名的 PDF 等。

问题是当我要从 Acrobat 打印 PDF 时。签名信息不会显示在预览中,当然当我打印文件时也不会显示,因此该框只是空白。

我是否缺少 PdfFormField 上的某些配置?我需要什么才能允许打印签名?

Link of sample PDF

最佳答案

PRINT 标志是注释标志,而不是字段标志。

您使用setFieldFlags

digitalSignatureField.setFieldFlags(PdfAnnotation.FLAGS_PRINT);

它设置了一些您可能根本不感兴趣的字段标志。相反,您应该使用 setFlags

digitalSignatureField.setFlags(PdfAnnotation.FLAGS_PRINT);

实际设置使注释可打印的标志。

此外,您还可以将签名字段添加到注释中

pdfWriter.addAnnotation(digitalSignatureField);

FieldPositioningEvents 在布局期间也会这样做。因此,签名字段会在注释列表中重复,这是您不希望出现的情况。

关于java - iText 签名表单字段内容未打印在纸上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48901754/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com