【问题标题】:Table Cell HorizontalAlignment is ignored/broken表格单元格水平对齐被忽略/损坏
【发布时间】:2016-12-05 15:30:54
【问题描述】:

我使用的是 iText 7.0.0(Java 风格),似乎表格单元格 Horizo​​ntalAlignment 被忽略了,因为 CENTER 和 RIGHT 都不起作用。你能重现这个吗?

see the pdf screenshoot

以及要重现的代码:

private static void brokenTableCellHorizontalAlignmentPdf(OutputStream output) throws IOException {
    PdfWriter writer = new PdfWriter(output);
    PdfDocument pdf = new PdfDocument(writer);
    Document document = new Document(pdf);
    PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA);
    Table table = new Table(new float[] {15f, 16f, 4f}).setWidthPercent(100);
    for (int y = 1; y <= 3; ++y) {
        for (int x = 1; x <= 3; ++x) {
            table.addCell(
                    new Cell()
                            .setVerticalAlignment(VerticalAlignment.MIDDLE)
                            .setHorizontalAlignment(HorizontalAlignment.CENTER)
                            .add(new Paragraph(String.format("(%d, %d)%s", y, x, x == 1 ? "\n\ntest" : ""))
                                    .setFont(font)
                                    .setFontSize(8)));
        }
    }
    document.add(table);
    document.close();
}

【问题讨论】:

  • 您好,我鼓励您接受布鲁诺对这个问题的回答,因为我觉得它非常透彻,并且可能有助于其他遇到此问题的人更容易找到答案。

标签: itext itext7


【解决方案1】:

请查看CellAlignment 示例:

public void createPdf(String dest) throws IOException {
    //Initialize PDF document
    PdfDocument pdf = new PdfDocument(new PdfWriter(dest));

    // Initialize document
    Document document = new Document(pdf);
    Table table = new Table(new float[]{2, 1, 1});
    table.setWidthPercent(80);
    table.setHorizontalAlignment(HorizontalAlignment.CENTER);
    table.setTextAlignment(TextAlignment.CENTER);
    table.addCell(new Cell(1, 3).add("Cell with colspan 3"));
    table.addCell(new Cell(2, 1).add("Cell with rowspan 2")
        .setTextAlignment(TextAlignment.RIGHT));
    table.addCell("row 1; cell 1");
    table.addCell("row 1; cell 2");
    table.addCell("row 2; cell 1");
    table.addCell("row 2; cell 2");
    Cell cell = new Cell()
        .add(new Paragraph("Left").setTextAlignment(TextAlignment.LEFT))
        .add(new Paragraph("Center"))
        .add(new Paragraph("Right").setTextAlignment(TextAlignment.RIGHT));
    table.addCell(cell);
    cell = new Cell().add("Middle")
        .setVerticalAlignment(VerticalAlignment.MIDDLE);
    table.addCell(cell);
    cell = new Cell().add("Bottom")
        .setVerticalAlignment(VerticalAlignment.BOTTOM);
    table.addCell(cell);
    document.add(table);
    document.close();
}

运行此示例时生成的 PDF 如下所示:

对齐没有问题,垂直、水平或文本对齐都没有。

【讨论】:

    【解决方案2】:

    哦,没关系!在查看另一个答案(指向http://gitlab.itextsupport.com/itext7/samples/blob/develop/publications/highlevel/src/main/java/com/itextpdf/highlevel/chapter05/C05E03_CellAlignment.java)之后,我们现在应该使用setTextAlignment。如:

    new Paragraph(String.format("(%d, %d)%s", y, x, x == 1 ? "\n\ntest" : ""))
        .setFont(font)
        .setFontSize(8)
        .setTextAlignment(TextAlignment.CENTER)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      相关资源
      最近更新 更多