我正在使用BIRT报告库创建一个 pdf 文件。稍后我需要对这些文件进行数字签名。我正在使用iText对文档进行数字签名。
我面临的问题是,我需要将签名放在不同报告中的不同位置。我已经有了对文档进行数字签名的代码,现在我总是将签名放在每份报告的最后一页的底部。
最终,我需要每份报告都说明我需要在哪里签名。然后我必须使用 iText 读取位置,然后将签名放在该位置。
这是否可以使用 BIRT 和 iText 来实现
谢谢
如果你愿意作弊,你可以使用一个链接......根据我刚才对他们文档的小深入了解,BIRT 支持该链接。
链接是注释。遗憾的是,iText 不支持在高级别检查注释,只生成它们,因此您必须使用低级别的对象调用。
提取它的代码可能如下所示:
// getPageN is looking for a page number, not a page index
PdfDictionary lastPageDict = myReader.getPageN(myReader.getNumberOfPages());
PdfArray annotations = lastPageDict.getAsArray( PdfName.ANNOTS );
PdfArray linkRect = null;
if (annotations != null) {
int numAnnots = annotations.size();
for (int i = 0; i < numAnnots; ++i) {
PdfDictionary annotDict = annotations.getAsDict( i );
if (annotDict == null)
continue; // it'll never happen, unless you're dealing with a Really Messed Up PDF.
if (PdfName.LINK.equals( annotDict.getAsName( PdfName.SUBTYPE ) )) {
// if this isn't the only link on the last page, you'll have to check the URL, which
// is a tad more work.
linkRect = annotDict.getAsArray( PdfName.RECT );
// a little sanity check here wouldn't hurt, but I have yet to come across a PDF
// that was THAT screwed up, and I've seen some Really Messed Up PDFs over the years.
// and kill the link, it's just there for a placeholder anyway.
// iText doesn't maintain any extra info on links, so no need for other calls.
annotations.remove( i );
break;
}
}
}
if (linkRect != null) {
// linkRect is an array, thusly: [ llx, lly, urx, ury ].
// you could use floats instead, but I wouldn't go with integers.
double llx = linkRect.getAsNumber( 0 ).getDoubleValue();
double lly = linkRect.getAsNumber( 1 ).getDoubleValue();
double urx = linkRect.getAsNumber( 2 ).getDoubleValue();
double ury = linkRect.getAsNumber( 3 ).getDoubleValue();
// make your signature
magic();
}
如果 BIRT 在链接下的页面内容中生成一些文本用于其视觉表示,那只是一个小问题。你的签名应该完全覆盖它。
如果您首先可以直接从 BIRT 生成签名,那么您肯定会更好,但是我对他们的文档的小检查并没有完全让我对他们的 PDF 定制能力充满信心......尽管他们自己坐在 iText 之上. 它是一个恰好能够生成 PDF 的报告生成器……我不应该期望太多。`
编辑:如果您需要查找特定的 URL,您需要查看 PDF 参考的“12.5.6.5 链接注释”部分,可在此处找到:http: //www.adobe.com/content/ dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf
我对BIRT一无所知,对iText只有一点了解。但也许这有效......
BIRT 可以将签名框的轮廓生成为具有给定字段名称的常规表单字段吗?如果是这样,那么您应该能够: