Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java iText列宽错误_Java_Android_Itext - Fatal编程技术网

Java iText列宽错误

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

我在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, 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,谢谢你的帮助。一切都是有意义的。我会详细检查的。谢谢你,哈尔西昂,谢谢你的帮助。一切都有道理。我会详细检查的。