在Java中使用Itext将标头仅添加到第一个PDF页面

时间:2018-12-20 18:10:14

标签: java itext pdf-generation

我正在使用iText在我的项目中生成PDF文档,并且工作正常。我正在使用writer.setPageEvent在onEndPage方法中添加页眉和页脚。

@Override
    public void onEndPage(PdfWriter writer, Document document) {
        try {
            addHeader(writer);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        addFooter(writer);
    }

我的问题是我只想在第一页上显示标题,而不在随后的页面上显示标题。但是标题将显示在所有页面上。

2 个答案:

答案 0 :(得分:1)

如果只想在单个页面(特别是第一文档页面)上添加页眉,则根本不需要使用页面事件!页面事件非常适合在许多页面上添加类似的内容,或者甚至仅在通过事件确定的少数页面上添加内容,但是对于当前情况,仅将标题添加到第一页,根本就不需要它们。

因此,作为@Soufiane Sakhi在其回答中建议的事件侦听器中的标志的替代方案,您可以从addHeader(writer)方法中完全删除onEndPage调用:

public void onEndPage(PdfWriter writer, Document document) {
    addFooter(writer);
}

并在打开文档后立即执行它(当第一页是当前页面时)

Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
writer.setPageEvent(YOUR_PAGE_EVENT_LISTENER);
document.open();
addHeader(writer);

答案 1 :(得分:0)

您可以在PdfPageEventHelper中添加一个字段,以检查它是否是第一页,如下所示:

private boolean firstPage = true;

@Override
public void onEndPage(PdfWriter writer, Document document) {
    try {
        if (firstPage) {
            firstPage = false;
            addHeader(writer);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    addFooter(writer);
}