itext - iText PDF/A-2 Java 在页脚中添加总页数
问题描述
我需要将总页数添加到使用 Java 中的 iText 创建的 PDF/A-2 文档中。正在使用以下代码:
public class HeaderFooterPageEvent extends PdfPageEventHelper {
Font fontHEADER = null;
/** The template with the total number of pages. */
PdfTemplate total;
public HeaderFooterPageEvent() {
try {
fontHEADER = new Font(BaseFont.createFont("OpenSans-Regular.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED), 8, Font.BOLD);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onOpenDocument(PdfWriter writer, Document document) {
total = writer.getDirectContent().createTemplate(30, 16);
super.onOpenDocument(writer, document);
}
@Override
public void onCloseDocument(PdfWriter writer, Document document) {
PdfContentByte cb = writer.getDirectContent();
ColumnText.showTextAligned(total, Element.ALIGN_RIGHT,
new Phrase(String.valueOf(writer.getPageNumber() - 1)),fontHEADER),
document.right() - document.rightMargin()+5,
document.bottom() - 10, 0);
super.onCloseDocument(writer, document);
}
}
在创建 PDF 时,会调用以下代码:
Document document = new Document(PageSize.A4, 15, 15, 30, 20);
PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(dest), PdfAConformanceLevel.PDF_A_2A);
writer.createXmpMetadata();
writer.setTagged();
// add header and footer
HeaderFooterPageEvent event = new HeaderFooterPageEvent();
writer.setPageEvent(event);
document.open();
document.addLanguage("en-us");
File file = new File("sRGB_CS_profile.icm");
ICC_Profile icc = ICC_Profile
.getInstance(new FileInputStream(file));
writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);
Paragraph p=new Paragraph("Page 1 content",fontEmbedded); //setting an embedded font
p.setSpacingBefore(30f);
document.add(p);
document.newPage();
document.add(new Paragraph("Content of next page goes here",fontEmbedded));
document.close();
现在当我们在2个页面上添加内容并使用document.newPage()
添加新页面时,会产生运行时异常The page 3 was requested but the document has only 2 pages.
这个问题的解决方案是什么?
解决方案
推荐阅读
- javascript - 在一段特定文本之后替换给定长度的子字符串
- javascript - 仅在单击的元素上显示组件
- amazon-web-services - AWS IAM s3:前缀
- unreal-engine4 - 物理资产中的无法旋转约束
- automation - 无法启动 webkit 或与 playwright 截屏
- python - Python:将日志记录模块与 configparser 或 argparser 一起使用
- javascript - 使用 Leaflet 扩展自定义图标的“可点击”区域
- c# - 不使用 SSL 或 TLS 时 MailKit 中的 SSL 或 TLS 连接错误
- excel - 对于大文件(大于 1GB),如何使用 VBA (Excel) 将带有 unix 行结尾的文件转换为 DOS 并快速完成?
- c - 当我链接目标文件时,为什么我的 pdb 文件缺少符号?