【问题标题】:An invisible border of pdfptablepdfptable的一个隐形边框
【发布时间】:2023-03-20 05:15:01
【问题描述】:

我正在使用 iText 库在 Java 中生成 pdf 文件。我在 pdfptable 中写入数据,如何使表格的边框不可见?

【问题讨论】:

    标签: java itext


    【解决方案1】:

    PdfPTable 的边框元素由添加到表格中的 PdfPCell 定义。每个单元格都有自己的样式/格式。 这是 API:http://api.itextpdf.com/

    例子

    PdfPTable table = new PdfPTable(2);
    PdfPCell cellOne = new PdfPCell(new Phrase("Hello"));
    PdfPCell cellTwo = new PdfPCell(new Phrase("World"));
    
    cellOne.setBorder(Rectangle.NO_BORDER);
    cellOne.setBackgroundColor(new Color(255,255,45));
    
    cellTwo.setBorder(Rectangle.BOX);
    
    table.addCell(cellOne);
    table.addCell(cellTwo);
    

    如果您想了解更多有关矩形/边框值的详细信息,请查看矩形的 IText 常量值部分,此处为:http://api.itextpdf.com/constant-values.html

    【讨论】:

    • 我都独立尝试过,似乎都使边框不可见。 cellOne.setBorder(Rectangle.NO_BORDER);cellTwo.setBorder(Rectangle.BOX); 到底有什么区别?
    【解决方案2】:

    在我的应用中它是这样工作的:

    PdfPTable table = new PdfPTable(2);
    table.getDefaultCell().setBorder(0);
    ...
    

    【讨论】:

    • Rectangle.NO_BORDER0 相同 我更喜欢使用常量名称,更易于阅读并且在版本升级时始终兼容。
    • 此方法在 5.5.6 版本中似乎不起作用。肖恩的回答是正确的:cellOne.setBorder(Rectangle.NO_BORDER);
    【解决方案3】:

    以下内容对我有用。

    table.getDefaultCell().setBorderWidth(0f);
    

    【讨论】:

    • 如果 ItextSharp 5+ ; table.DefaultCell.BorderWidth = 0f 仅适用于默认单元格。
    【解决方案4】:
        PdfPTable nestedTable = new PdfPTable();
        nestedTable.DefaultCell.Border = 0;
    
        nestedTable.AddCell(new Phrase("First");
        nestedTable.AddCell(new Phrase("Second");
        nestedTable.AddCell(new Phrase("2515");
    
        PdfPCell nestCell= new PdfPCell(nestedTable);
    

    【讨论】:

    • nestedTable.DefaultCell.Border = 0; - 看起来不太对劲。经过测试,我还发现这不起作用。除非 DefaultCell 和 Border 属性是公开的,否则这永远不会起作用。
    • 它可以工作 - 但仅限于 C#(查看属性和方法调用的情况),而 OP 询问 Java 解决方案。此外,第 4-6 行中缺少括号。
    【解决方案5】:

    设置单元格颜色为白色。

    cellOne.setBorderColor(BaseColor.WHITE);
    

    【讨论】:

      【解决方案6】:

      你可以这样隐藏边框

      PdfPCell cell = new PdfPCell ();
      cell.setBorder(Rectangle.NO_BORDER);
      

      【讨论】:

        【解决方案7】:

        对于 iText 7

        Table table = new Table();
        table.SetBorder(Border.NO_BORDER);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-23
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多