【问题标题】:iText 7 (Java) When Large Table extend to next page it does not draw bottom borderiText 7(Java)当大表扩展到下一页时,它不绘制底部边框
【发布时间】:2021-08-24 05:23:48
【问题描述】:

在我使用 iText 7 生成报告的 java 应用程序中,我需要从一个可能扩展到多个页面的大型数据表中获取数据。

我的代码段来生成表格。

    Table table = new Table(new float[] {0.4f, 1f, 1f, 1f, 1.3f, 1f, 1.3f, 0.6f,0.6f,1.2f}, true)
                .setWidth(UnitValue.createPercentValue(100))
                .setMarginTop(tblTopMargin)
                .setMarginBottom(0);
    int count = 0;
    while (!dataList.empty()) {
        String[] dataRow = dataList.poll();
        createDataRow(dataRow, table);
        count++;
        if(count % 10 == 0) {
            table.flush();
        }
    }

下面会提到createDataRaw方法的实现,

private void createDataRow(String[] a, Table table) {
    for (String s : a) {

      Paragraph content = new Paragraph(s)
        .setFontSize(7)
        .setFixedLeading(9)
        .setFontColor(new DeviceCmyk(0, 0, 0, 100));

      Cell cell = new Cell()
        .setBorder(new SolidBorder(ColorConstants.BLACK, 0.5f))
        .setPaddingLeft(2)
        .setPaddingTop(0)
        .setPaddingBottom(0)
        .setHorizontalAlignment(HorizontalAlignment.LEFT)
        .setVerticalAlignment(VerticalAlignment.MIDDLE)
        .add(content);

      table.addCell(cell);
    }
  }

用给定的代码表生成所有数据。但是当表格之间有分页符时,除了最后一个表格底部之外,表格的底线不会显示。

此处附上屏幕截图以获得更清晰的想法。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 你看到的是一个功能,让文档的阅读者一眼就知道表格延伸到下一页。
  • @GilbertLeBlanc 是否有任何选项可以禁用该功能。

标签: java itext7


【解决方案1】:

对于 iText 的最新 7.1.16 版本,以下代码为我生成了所需的结果:


    Table table = new Table(new float[] {0.4f, 1f, 1f}, true)
            .setWidth(UnitValue.createPercentValue(100))
            .setMarginBottom(0);
    document.add(table);
    int count = 0;
    for (int i = 0; i < 300; i++) {
        String[] dataRow = new String[] {"1\n2\n3\n4\n5\n6\n7\n8\n9\n10", "2\n3\nsf\n43", "3\nr\nsdfsd\n43"};
        createDataRow(dataRow, table);
        count++;
        if (count % 10 == 0) {
            table.flush();
        }
    }
    table.complete();

    document.close();
    private void createDataRow(String[] a, Table table) {
        for (String s : a) {
            Paragraph content = new Paragraph(s)
                    .setFontSize(7)
                    .setFixedLeading(9)
                    .setFontColor(new DeviceCmyk(0, 0, 0, 100));

            Cell cell = new Cell()
                    .setBorder(new SolidBorder(ColorConstants.BLACK, 0.5f))
                    .setPaddingLeft(2)
                    .setPaddingTop(0)
                    .setPaddingBottom(0)
                    .setHorizontalAlignment(HorizontalAlignment.LEFT)
                    .setVerticalAlignment(VerticalAlignment.MIDDLE)
                    .add(content);

            table.addCell(cell);
        }
    }

视觉结果(第一页结束):

【讨论】:

  • 这里有什么区别?我没有发现任何区别。
  • 代码不同?您可以使用在线工具来检查差异或逐行查看。这对你有用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 2022-11-16
  • 2015-05-21
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多