如何管理 PDF 数字签名的显示?
How to manage a PDF digital signature's display?
我正在使用 iText 库来签署我的 PDF 文档。
我想知道 PdfStamper 中是否有任何方法可以管理外观的显示:一层中的签名信息和另一层中的图像,它们现在位于同一层中:
解法:
PdfStamper pdfStamper;
pdfStamper = PdfStamper.createSignature(pdfReader, null, '[=10=]',
outputFile);
// appearance
PdfSignatureAppearance appearance = pdfStamper
.getSignatureAppearance();
appearance .setReason("Test");
appearance .setLocation("Location");
appearance .setSignatureGraphic(Image.getInstance(RESOURCE));
appearance.setRenderingMode(RenderingMode.GRAPHIC_AND_DESCRIPTION); appearance.setVisibleSignature(new Rectangle(420, 732, 512, 780), 1,"sign");
参考这个有趣的book,我现在可以创建描述和图形两个区域。
请阅读 Digital Signatures for PDF documents,第 2.4 节 "Creating different signature appearances." 您将了解层 n0 到 n4,并发现自 2003 年以来不再推荐使用层 n1、n3 和 n4(在其他单词:不要使用它们)。
你可以使用 n0 层,像这样称为背景层:
PdfTemplate n0 = appearance.getLayer(0);
float x = n0.getBoundingBox().getLeft();
float y = n0.getBoundingBox().getBottom();
float width = n0.getBoundingBox().getWidth();
float height = n0.getBoundingBox().getHeight();
n0.setColorFill(BaseColor.LIGHT_GRAY);
n0.rectangle(x, y, width, height);
n0.fill();
这只是书中的一个简单例子,画了一个浅灰色的矩形。
你可以像这样使用n2层:
PdfTemplate n2 = appearance.getLayer(2);
ColumnText ct = new ColumnText(n2);
ct.setSimpleColumn(n2.getBoundingBox());
Paragraph p = new Paragraph("This document was signed by Bruno Specimen.");
ct.addElement(p);
ct.go();
如果"drawing text"太难,也可以使用方便的方法如:
appearance.setLayer2Text("This document was signed by Bruno Specimen");
appearance.setLayer2Font(new Font(FontFamily.TIMES_ROMAN));
书中的示例可在 SourceForge 上找到。
使用以上方法,正在创建外观"the hard way"。还有不同的方法让 iText 完成工作:
我正在使用 iText 库来签署我的 PDF 文档。
我想知道 PdfStamper 中是否有任何方法可以管理外观的显示:一层中的签名信息和另一层中的图像,它们现在位于同一层中:
解法:
PdfStamper pdfStamper;
pdfStamper = PdfStamper.createSignature(pdfReader, null, '[=10=]',
outputFile);
// appearance
PdfSignatureAppearance appearance = pdfStamper
.getSignatureAppearance();
appearance .setReason("Test");
appearance .setLocation("Location");
appearance .setSignatureGraphic(Image.getInstance(RESOURCE));
appearance.setRenderingMode(RenderingMode.GRAPHIC_AND_DESCRIPTION); appearance.setVisibleSignature(new Rectangle(420, 732, 512, 780), 1,"sign");
参考这个有趣的book,我现在可以创建描述和图形两个区域。
请阅读 Digital Signatures for PDF documents,第 2.4 节 "Creating different signature appearances." 您将了解层 n0 到 n4,并发现自 2003 年以来不再推荐使用层 n1、n3 和 n4(在其他单词:不要使用它们)。
你可以使用 n0 层,像这样称为背景层:
PdfTemplate n0 = appearance.getLayer(0);
float x = n0.getBoundingBox().getLeft();
float y = n0.getBoundingBox().getBottom();
float width = n0.getBoundingBox().getWidth();
float height = n0.getBoundingBox().getHeight();
n0.setColorFill(BaseColor.LIGHT_GRAY);
n0.rectangle(x, y, width, height);
n0.fill();
这只是书中的一个简单例子,画了一个浅灰色的矩形。
你可以像这样使用n2层:
PdfTemplate n2 = appearance.getLayer(2);
ColumnText ct = new ColumnText(n2);
ct.setSimpleColumn(n2.getBoundingBox());
Paragraph p = new Paragraph("This document was signed by Bruno Specimen.");
ct.addElement(p);
ct.go();
如果"drawing text"太难,也可以使用方便的方法如:
appearance.setLayer2Text("This document was signed by Bruno Specimen");
appearance.setLayer2Font(new Font(FontFamily.TIMES_ROMAN));
书中的示例可在 SourceForge 上找到。
使用以上方法,正在创建外观"the hard way"。还有不同的方法让 iText 完成工作: