我能够使用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>
答案 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
)。
如果您是从头开始创建文档并且想要添加页眉和页脚,则可能需要在一个过程中执行此操作并使用页面事件添加页脚。