【问题标题】:How can I keep only outer table border and remove all other borders inside the table in iText in javajava - 如何在java中的iText中仅保留外部表格边框并删除表格内的所有其他边框
【发布时间】:2016-02-11 12:58:38
【问题描述】:

我是 iText 的新手。 我必须创建一个表。我必须只保留表格的外边框。删除表格内的所有行。可以请任何人建议使用什么。我搜索了多少我们可以更改单元格的边界。但我想要一些适用于整张桌子的东西。将它一个一个地添加到每个单元格将是一项繁琐的工作。 我已经分享了我想要的示例图像。

【问题讨论】:

    标签: java itext


    【解决方案1】:

    也许我迟到了,但我找到了一个简单的解决方案,让我使用 iTextSharp 实现了目标。 要获得一个有边框但没有单元格的表格,您可以按照以下步骤操作:

    1. 用 1 列初始化一个新的 PdfPTable,该列将用作辅助表;
    2. 初始化 PdpCell
    3. 初始化主表并将其添加到之前创建的单元格中;
    4. 为您创建的第一个表格(辅助表格)的单元格添加边框。
    5. 将单元格添加到您的辅助表中,您将获得结果。

    代码示例如下:

            PdfPTable tableAux = new PdfPTable(1);
            PdfPCell auxCell = new PdfPCell();
            auxCell.AddElement(myMainTable);
            tableAux.DefaultCell.Border = Rectangle.RECTANGLE;
            tableAux.DefaultCell.BorderColor = BaseColor.BLUE;
            tableAux.AddCell(auxCell);
    

    我使用 c# 实现了它,但当然您可以使用 java 使逻辑适应您的需求。 最好的问候!

    【讨论】:

    • 很好的解决方案,谢谢!我只需将 tableAux 的总宽度设置为等于 myMainTable 的总宽度,并将 myMainTable 的宽度百分比(在我的情况下默认为 80)设置为 100。
    【解决方案2】:

    请阅读documentation on the official web site,更具体地说是以下问题的答案:

    学习完文档后,将所学内容结合到一个示例中,例如 TableBorder 示例:

    这将创建一个没有任何边框的表格:

    PdfPTable table = new PdfPTable(4);
    table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
    for(int aw = 0; aw < 16; aw++){
        table.addCell("hi");
    }
    document.add(table);
    

    我们通过插入这一行来添加表格边框:

    table.setTableEvent(new BorderEvent());
    

    BorderEvent 类如下所示:

    public class BorderEvent implements PdfPTableEvent {
        public void tableLayout(PdfPTable table, float[][] widths,
        float[] heights, int headerRows, int rowStart,
        PdfContentByte[] canvases) {
            float width[] = widths[0];
            float x1 = width[0];
            float x2 = width[width.length - 1];
            float y1 = heights[0];
            float y2 = heights[heights.length - 1];
            PdfContentByte cb = canvases[PdfPTable.LINECANVAS];
            cb.rectangle(x1, y1, x2 - x1, y2 - y1);
            cb.stroke();
            cb.resetRGBColorStroke();
        }
    }
    

    结果如下:

    警告:如果此示例不起作用,请阅读Why doesn't getDefaultCell().setBorder(PdfPCell.NO_BORDER) have any effect?的答案

    有人(我)花了很多天(甚至几个月)创建这个包含所有这些问题和答案的网站。尊重我工作的人会使用该网站了解 iText。其他人只是要求“给我一个例子”。要求并获得榜样的人会因我在他们的位置上所做的工作而获得金钱。从我的网站了解 iText 的人通过他们所做的工作获得了金钱并且他们获得了知识。你可以说只对获得示例感兴趣的人得到金钱;而那些也获得知识的人,会变得富有

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 2015-03-13
      • 2015-07-04
      • 2017-05-27
      • 2014-04-08
      • 2018-04-29
      • 2013-01-05
      相关资源
      最近更新 更多