java - 如何使用 java itext 将数据传输到 PdfPageEventHelper?
问题描述
我正在使用 java itext 导出 pdf,并使用PdfPageEventHelper
为文件 pdf 创建页眉和页脚。我想将参数设置为PdfPageEventHelper
,但我不知道该怎么做?下面是代码:
public class HeaderFooterPageEvent extends PdfPageEventHelper {
private PdfTemplate pdfTemplate;
public void onOpenDocument(PdfWriter writer, Document document) {
pdfTemplate = writer.getDirectContent().createTemplate(30, 16);
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
addHeader(writer);
}
private void addHeader(PdfWriter writer){
PdfPTable header = new PdfPTable(4);
try {
// set defaults
header.setWidthPercentage(100);
header.setSpacingBefore(10f);
header.setSpacingAfter(10f);
header.setTotalWidth(600);
float[] columnHeader = {2f, 5.5f, 1.5f, 1.5f};
header.setWidths(columnHeader);
PdfPCell cellHeader;
cellHeader = new PdfPCell(new Phrase("", FontUtil.fontSize16()));
cellHeader.setBorderColor(BaseColor.WHITE);
header.addCell(cellHeader);
cellHeader = new PdfPCell(new Phrase("酒受払公簿 (受入)", FontUtil.fontSize16()));
cellHeader.setHorizontalAlignment(Element.ALIGN_CENTER);
cellHeader.setBorderColor(BaseColor.WHITE);
header.addCell(cellHeader);
cellHeader = new PdfPCell(new Phrase(String.format("%d / ", writer.getPageNumber()), FontUtil.fontSize9()));
cellHeader.setBorderColor(BaseColor.WHITE);
cellHeader.setHorizontalAlignment(Element.ALIGN_RIGHT);
header.addCell(cellHeader);
cellHeader = new PdfPCell(new Phrase("", FontUtil.fontSize16()));
cellHeader.setBorderColor(BaseColor.WHITE);
header.addCell(cellHeader);
//row 2
cellHeader = new PdfPCell(new Phrase("店番: 00048 店名: aaa", FontUtil.fontSize9()));
cellHeader.setBorderColor(BaseColor.WHITE);
cellHeader.setPaddingTop(10);
header.addCell(cellHeader);
cellHeader = new PdfPCell(new Phrase("期間: 2019年04月", FontUtil.fontSize10()));
cellHeader.setHorizontalAlignment(Element.ALIGN_CENTER);
cellHeader.setPaddingTop(8);
cellHeader.setBorderColor(BaseColor.WHITE);
header.addCell(cellHeader);
cellHeader = new PdfPCell(new Phrase("", FontUtil.fontSize9()));
cellHeader.setBorderColor(BaseColor.WHITE);
header.addCell(cellHeader);
cellHeader = new PdfPCell(new Phrase("", FontUtil.fontSize9()));
cellHeader.setBorderColor(BaseColor.WHITE);
header.addCell(cellHeader);
// add placeholder for total page count
PdfPCell totalPageCount = new PdfPCell(Image.getInstance(pdfTemplate));
totalPageCount.setBorderColor(BaseColor.WHITE);
header.addCell(totalPageCount);
// write page
PdfContentByte canvas = writer.getDirectContent();
canvas.beginMarkedContentSequence(PdfName.ARTIFACT);
header.writeSelectedRows(0, -1 , 34, 803, writer.getDirectContent());
canvas.endMarkedContentSequence();
} catch(DocumentException | FileNotFoundException de) {
throw new ExceptionConverter(de);
}
}
public void onCloseDocument(PdfWriter writer, Document document) {
try {
ColumnText.showTextAligned(pdfTemplate, Element.ALIGN_RIGHT, new Phrase(String.valueOf(writer.getPageNumber() - 1), FontUtil.fontSize9()),
10, 5, 0);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
解决方案
推荐阅读
- java - Google 测试框架是否支持 JAVA 语言。?还是只支持 C++?如果是,Google test Framework for JAVA 的替代方案是什么
- reactjs - 通过fetch发布数据后如何清除输入并使代码执行成功
- python - 我如何找到这个特定字符串的多次出现并将它们拆分成一个列表?
- opencv - 如何通过知道像素和相机与物体之间的距离来计算图像的尺寸?
- java - 正则表达式显示不同的同时返回不同的结果
- windows - 使用批处理脚本将特定列和行值复制到新列
- haskell - 嵌套循环格式
- vb.net - 如何使用 AT 命令发送长消息,vb.Net
- c++ - 为什么我在函数内部使用引用并通过引用返回它仍然有效?
- oracle - 无法使用spring ldap删除ldap中的属性