使用itext将页脚添加到pdf

时间:2015-03-31 02:15:46

标签: java pdf pdf-generation itext

我能够使用java和itext创建一个带有页眉和正文内容的pdf文件。您可以在文件共享站点by clicking on this link查看生成的文件。

如何更改下面的代码,以便在页面底部创建页脚?我希望页脚说“MyCity,MyState,MyPostalCode MyPhoneNumber”。我还想在页面上方有一条线,就像标题在上面的示例链接中有一条线一样。

以下是在上面的链接中生成示例PDF的代码:

public class HeaderFooter {

    public static final String RESULT = "C:\\path\\to\\headerfooter.pdf";

    public static void main(String[] args) throws SQLException, DocumentException, IOException {

        Document document = new Document(PageSize.A4, 36, 36, 54, 36);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfWriter.getInstance(document, baos);
        document.open();
        document.add(new Paragraph(""));
        document.add(Chunk.NEWLINE);
        document.add(new Paragraph("First paragraph."));
        document.add(new Paragraph("Second paragraph."));
        document.add(new Paragraph("Third paragraph."));
        document.newPage();
        document.close();

        PdfReader reader = new PdfReader(baos.toByteArray());
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
        int n = reader.getNumberOfPages();
        for (int i = 1; i <= n; i++) {
            getHeader(i, n).writeSelectedRows(0, -1, 34, 803, stamper.getOverContent(i));
        }
        stamper.close();
        reader.close();
    }

    public static PdfPTable getHeader(int x, int y) {
        PdfPTable table = new PdfPTable(2);
        table.setTotalWidth(527);
        table.setLockedWidth(true);
        table.getDefaultCell().setFixedHeight(20);
        table.getDefaultCell().setBorder(Rectangle.BOTTOM);
        table.addCell("This is the Document's Title.");
        table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
        return table;
    }
}

对于想要花一分钟时间让上述代码在他们的计算机上工作的人,添加到pom.xml的maven依赖项是:

  <dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.5</version>
  </dependency>

1 个答案:

答案 0 :(得分:-1)

您从我为我的书写的TwoPasses示例中复制/粘贴了代码。请注意,如果没有某种归属(例如您找到代码的位置的链接),则不应复制/粘贴其他人编写的代码。这是我在对iText进行代码审查时学到的内容(参见我为方正研究所提交的幻灯片"Startup Legal and IP")。

另外:当您复制/粘贴在书籍上下文中编写的代码时,请确保您像真正的开发人员一样工作,并阅读您要复制/粘贴的代码应该做什么。例如:在你作为灵感的书中,还有PdfCalendar例子。

在这个例子中,我们还创建了一个使用writeSelectedRows()方法在绝对位置添加的表。就像您一样,我们使用setTotalWidth()方法定义宽度,这意味着我们可以使用getTotalHeight()方法向表格询问其高度。

PdfCalendar示例中,我们将此值用作writeSelectedRows()方法的参数:

table.writeSelectedRows(0, -1, 169, table.getTotalHeight() + 20, canvas);

在这种情况下,x值为169,这是通过获取页​​面宽度(横向A4 = 842)减去表格宽度(我们定义为504)获得的值,除以2:338/2 = 169。

对于y,我们采用了表格的高度(可以根据当月的天数而变化),我们添加了20个用户单位作为底部边距。

您已选择34作为x的值,这是正常的,但y为806,如果您希望表格成为页脚,这很奇怪:806通常位于页面顶部页面(特别是因为您将页面大小定义为PageSize.A4)。

如果您是从头开始创建文档并且想要添加页眉和页脚,则可能需要在一个过程中执行此操作并使用页面事件添加页脚。