我有一个标题表和一个内容表。我的内容表太长,不适合单个页面。所以我想在每页后重复我的标题表。我怎样才能做到这一点?请帮忙。
这是我的代码
File tempFile = File.createTempFile("progress", "tmp");
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(tempFile));
document.setMargins(6, 6, 36, 36);
document.setMarginMirroring(true);
document.open();
PdfPTable titleTable = new PdfPTable(new float[] { 18f });
// Image img = Image.getInstance(uploadFolder + "/logo.jpg");
Font titleFont = new Font(getBaseFont(), 12f, Font.BOLD);
Font tHeadFont = new Font(getBaseFont(), 10f, Font.BOLD);
Font contentFont = new Font(getBaseFont(), 10f);
// img.scalePercent(50);
titleTable.setWidthPercentage(100);
titleTable.getDefaultCell().setBorder(PdfPCell.NO_BORDER);
titleTable.getDefaultCell().setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
// titleTable.addCell(new Paragraph(new Chunk(img, 5, -5)));
document.add(gutter());
titleTable.addCell(new Paragraph("Title", titleFont));
document.add(titleTable);
document.add(gutter());
document.add(gutter());
PdfPTable comTable = new PdfPTable(new float[] { 6f, 4f, 2f, 3f, 6f, 3f });
PdfPCell cell1 = new PdfPCell(new Paragraph("Module", tHeadFont));
cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell1.setPaddingBottom(4);
comTable.addCell(cell1);
PdfPCell cell2 = new PdfPCell(new Paragraph("Name", tHeadFont));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
cell2.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell2.setPaddingBottom(4);
comTable.addCell(cell2);
PdfPCell cell3 = new PdfPCell(new Paragraph("Serial", tHeadFont));
cell3.setHorizontalAlignment(Element.ALIGN_CENTER);
cell3.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell3.setPaddingBottom(4);
comTable.addCell(cell3);
PdfPCell cell4 = new PdfPCell(new Paragraph("Lesson", tHeadFont));
cell4.setHorizontalAlignment(Element.ALIGN_CENTER);
cell4.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell4.setPaddingBottom(4);
comTable.addCell(cell4);
PdfPCell cell5 = new PdfPCell(new Paragraph("Topic", tHeadFont));
cell5.setHorizontalAlignment(Element.ALIGN_CENTER);
cell5.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell5.setPaddingBottom(4);
comTable.addCell(cell5);
PdfPCell cell6 = new PdfPCell(new Paragraph("No.of Lessons", tHeadFont));
cell6.setHorizontalAlignment(Element.ALIGN_CENTER);
cell6.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell6.setPaddingBottom(4);
comTable.addCell(cell6);
下面有一些迭代用于显示动态的内容,所以我不知道会有多少页面。 我想在所有页面上重复titleTable。
答案 0 :(得分:2)
您有不同的选择。
方法#1:定义表格的标题行
您可以使用单个表并定义一个或多个标题行,而不是使用两个表。在以下问题的答案中解释了这一点:
您还可以从以下示例中获得灵感:
方法#2:定义页面标题
正如您在StackOverflow上浏览其他问题时所发现的那样,您可以使用页面事件来创建标题。不到一天前,我在这里解释了基本原则:Header and Footer in ITextSharp
有关更多示例,请参阅:
但你真正想要的是问题的答案:
简而言之,您需要这样的页面事件:
public class FooterTable extends PdfPageEventHelper {
protected PdfPTable footer;
public FooterTable(PdfPTable footer) {
this.footer = footer;
}
public void onEndPage(PdfWriter writer, Document document) {
footer.writeSelectedRows(0, -1, 36, 64, writer.getDirectContent());
}
}
但是,您应该调用此类FooterTable
而不是使用硬编码坐标代替HeaderTable
,而应使用以下内容:
float x = document.left(36);
float y = document.top(10);
footer.writeSelectedRows(0, -1, x, y, writer.getDirectContent());
在定义x
和y
时,我使用document
对象作为只读对象来获取边距为36的左边坐标和顶部坐标为a保证值为50很重要的是要知道10的余量可能是表空间不足:标题表可能会遇到内容表。如果是这种情况,则需要计算标题表的高度并更改文档的上边距,以使标题表和内容表不重叠。
我有一个问题要问:我们重新设计了iText网站,并在感恩节发布了它。我们现在注意到,我们没有像以前那样多次访问。鉴于您需要的所有信息都可以在在线文档中找到,并且鉴于您仍然需要提出问题这一事实,我们想知道该网站有什么问题。我们可以做些什么来改善内容吗?为了找到问题的答案,我使用了搜索框和标签,例如header。可能是什么原因导致人们远离我们的网站?我们现在有太多内容吗?