首页 > 解决方案 > 如何使用 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();
    }
}

}

标签: javaspringitext

解决方案


推荐阅读