This is official iText solution for creating a table on the last page at the bottom in pdf document.此解决方案将我的表放在最后一个pdf页面的底部。大。
不幸的是,它导致我的桌子变得更窄。这就是我不想要的。我已经尝试了几个小时让桌子再次变宽,但没有成功。我无法解决它。移动前如何将桌子放在原始大小的底部?这个问题的最佳解决方案是什么?
问题图片
在移动之前,我的表的宽度仅基于table.setWidthPercentage(100)创建;然后它开始报告异常,表的宽度必须大于零。
table.setWidths(我表中的列数);
我尝试将table.setTotalWidth()设置为不等于零的值,然后使用iText中的官方代码覆盖它。但没有成功。我正在寻找一些优雅的解决方案。
代码:
public static void main(String[] args)
{
Document document = new Document(PageSize.A4);
PdfWriter writer = null;
try {
writer = PdfWriter.getInstance(document,
new FileOutputStream("C:/radek-folder/calendar.pdf"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
document.open();
PdfPTable datatable = createHeaderTable();
document.add(datatable);
datatable = createFooterTable();
drawTableAtTheEndOfPage(document, writer, datatable);
document.close();
System.out.println("done");
}
private static void drawTableAtTheEndOfPage(Document document, PdfWriter writer, PdfPTable datatable) {
datatable.setTotalWidth(document.right(document.rightMargin()) - document.left(document.leftMargin()));
datatable.writeSelectedRows(0, -1, document.left(document.leftMargin()),
datatable.getTotalHeight() + document.bottom(document.bottomMargin()),
writer.getDirectContent());
}
private static PdfPTable createFooterTable() throws DocumentException {
int[] columnWidths = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 };
PdfPTable datatable = new PdfPTable(columnWidths.length);
datatable.setKeepTogether(true);
datatable.setWidthPercentage(100);
datatable.setWidths(columnWidths);
datatable.getDefaultCell().setPadding(5);
datatable.getDefaultCell().setHorizontalAlignment(horizontalAlignment);
datatable.getDefaultCell().setVerticalAlignment(verticalAlignment);
for (int i = 0; i < 100; i++) {
addCellToTable(datatable, horizontalAlignmentLeft,
verticalAlignmentMiddle, "Přehledová tabulka", columnWidths.length, 1,
fontTypeBold, fontSizeRegular, cellLayout_Bottom);
}
return datatable;
}
答案 0 :(得分:2)
我插入(document.leftMargin() - 50)例如,它随桌子移动到一边。我尝试了各种各样的价值观,但我找不到合适的价值观。在工作的三天内,我将尝试零: - )
你现在应该尝试零!
事实上,样本来源的that official sample和the answer here on stack overflow在应用边距时略有错误:
datatable.setTotalWidth(document.right(document.rightMargin()) -
document.left(document.leftMargin()));
datatable.writeSelectedRows(0, -1, document.left(document.leftMargin()),
datatable.getTotalHeight() + document.bottom(document.bottomMargin()),
writer.getDirectContent());
因为Document
方法left
,bottom
,right
和top
本身已经应用了匹配的边距,例如
public float left(float margin) {
return pageSize.getLeft(marginLeft + margin);
}
因此,推荐的代码有效地应用了两次边距!
因此,您的方法drawTableAtTheEndOfPage
应如下所示:
private static void drawTableAtTheEndOfPage(Document document, PdfWriter writer, PdfPTable datatable)
{
datatable.setTotalWidth(document.right() - document.left());
datatable.writeSelectedRows(0, -1, document.left(),
datatable.getTotalHeight() + document.bottom(), writer.getDirectContent());
}