Java iText列宽错误
我在android中使用iText构建一个带有表格的pdf文件。这似乎很容易做到,但结果是错误的。谢谢你的帮助Java iText列宽错误,java,android,itext,Java,Android,Itext,我在android中使用iText构建一个带有表格的pdf文件。这似乎很容易做到,但结果是错误的。谢谢你的帮助 PdfDocument pdfDoc = new PdfDocument(new PdfWriter(output)); Document documento = new Document(pdfDoc); float[] columnWidths = new float[]{40, 160, 50, 25, 25, 25, 25, 25, 25, 25, 2
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(output));
Document documento = new Document(pdfDoc);
float[] columnWidths = new float[]{40, 160, 50, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25};
Table table = new Table(columnWidths);
table.setWidth(500);
com.itextpdf.layout.element.Cell cell = new com.itextpdf.layout.element.Cell(1, columnWidths.length).add("(Continuação)");
table.addHeaderCell(cell);
cell = new com.itextpdf.layout.element.Cell(1, columnWidths.length).add("Continua...");
table.addFooterCell(cell);
table.setSkipFirstHeader(true);
table.setSkipLastFooter(true);
Cell cellA;
for (int i = 0; i < 100; i++) {
cellA = new Cell(1, 1).add(String.valueOf(i+1));
cellA.setTextAlignment(TextAlignment.CENTER);
cellA.setWidth(40);
cellA.setFontSize(7);
table.addCell(cellA);
cellA = new Cell(1, 1).add("ALYNE BORGES MADEIRA");
cellA.setTextAlignment(TextAlignment.LEFT);
cellA.setWidth(160);
cellA.setFontSize(7);
table.addCell(cellA);
cellA = new Cell(1, 1).add("100.00");
cellA.setTextAlignment(TextAlignment.CENTER);
cellA.setWidth(50);
cellA.setFontSize(7);
table.addCell(cellA);
for (int j = 0; j < 10; j++) {
cellA = new Cell(1, 1).add("10.00");
cellA.setTextAlignment(TextAlignment.CENTER);
cellA.setWidth(25);
cellA.setFontSize(7);
table.addCell(cellA);
}
}
PdfDocument pdfDoc=新的PdfDocument(新的PdfWriter(输出));
文件o=新文件(pdfDoc);
float[]columnWidths=新的float[]{40,160,50,25,25,25,25,25,25,25,25};
表格=新表格(列宽);
表1.设置宽度(500);
com.itextpdf.layout.element.Cell Cell=new com.itextpdf.layout.element.Cell(1,columnWidths.length);
表2.addHeaderCell(单元);
cell=new com.itextpdf.layout.element.cell(1,columnWidths.length);
表2.addFooterCell(单元格);
表.设置KipFirstHeader(正确);
表.页脚(真);
细胞;
对于(int i=0;i<100;i++){
cellA=新单元格(1,1).add(String.valueOf(i+1));
cellA.setTextAlignment(TextAlignment.CENTER);
细胞集宽(40);
细胞大小(7);
表1.addCell(cellA);
cellA=新单元格(1,1)。添加(“ALYNE BORGES MADEIRA”);
cellA.setTextAlignment(TextAlignment.LEFT);
细胞集宽(160);
细胞大小(7);
表1.addCell(cellA);
cellA=新单元格(1,1)。添加(“100.00”);
cellA.setTextAlignment(TextAlignment.CENTER);
细胞集宽(50);
细胞大小(7);
表1.addCell(cellA);
对于(int j=0;j<10;j++){
cellA=新单元格(1,1)。添加(“10.00”);
cellA.setTextAlignment(TextAlignment.CENTER);
细胞集宽(25);
细胞大小(7);
表1.addCell(cellA);
}
}
问题在于最后一列的宽度不等于前面的9
摘要
如果您只是使用它来生成PDF表格,而不需要RTF和HTML输出,那么最好使用PdfPTable类[Table is now unsupported],它支持得更好,也不太容易出现怪癖(如此处所述:)
大小调整
如果您将PdfPTable与设置宽度(float[])
一起使用,那么您应该能够执行绝对宽度,而无需为代码可读性指定每个单元格中的宽度。(您还可以使用百分比宽度,对于基本表格,这可能更容易在页面上正确对齐。)
页眉和页脚
由于您使用的是页眉和页脚,PdfPTable具有setHeaderRows(int)
和setFooterRows(int)
,但请注意:
页眉行数减去页脚行数。例如,对于具有两个页眉行和一个页脚行的表,代码为:
table.setHeaderRows(3)代码>
table.setFooterRows(1)代码>
PdfPCell移植
还请注意,PdfPCell已将setTextAlignment
更改为setHorizontalAlignment
示例和文档
这里有一些使用它的示例(注意setLockedWidth
的用法:
JavaDoc for PdfPTable如下所示:
PdfPCell的JavaDoc在这里:摘要
如果您只是使用它来生成PDF表格,而不需要RTF和HTML输出,那么最好使用PdfPTable类[Table is now unsupported],它支持得更好,也不太容易出现怪癖(如此处所述:)
大小调整
如果您将PdfPTable与设置宽度(float[])
一起使用,那么您应该能够使用绝对宽度,而无需为代码可读性指定每个单元格中的宽度。(您还可以使用百分比宽度,对于基本表,这可能更容易在页面上正确对齐。)
页眉和页脚
由于您使用的是页眉和页脚,PdfPTable具有setHeaderRows(int)
和setFooterRows(int)
,但请注意:
页眉行数减去页脚行数。例如,对于包含两个页眉行和一个页脚行的表,代码为:
table.setHeaderRows(3);
table.setFooterRows(1);
PdfPCell移植
还请注意,PdfPCell已将setTextAlignment
更改为setHorizontalAlignment
示例和文档
这里有一些使用它的示例(注意setLockedWidth
的用法:
JavaDoc for PdfPTable如下所示:
PdfPCell的JavaDoc在这里:为什么列宽与单元格宽度不同?让我纠正一下。这是所有更改和测试的结果。您测量过实际单元格大小吗?它们是您在数组中布置的实际像素数吗?如果中间单元格的宽度不是25像素,可能会有一些缩放ng正在完成,最后一列正在填充以填充页面。@Bob Dalgleish:可能是这样,但现在我开始认为这是iText的问题。为什么列宽与单元格宽度不同?让我更正一下。这是所有更改和测试的结果。您测量过实际的单元格大小吗?它们是a吗阵列中实际布置的像素数?如果中间的单元格实际上不是25像素宽,可能会进行一些缩放,最后一列会被填充以填充页面。@Bob Dalgleish:可能是这样,但现在我开始相信这是iText的问题。谢谢你,Halcyon,谢谢你的帮助。一切都是有意义的。我会详细检查的。谢谢你,哈尔西昂,谢谢你的帮助。一切都有道理。我会详细检查的。