iText缩小表格列以适合内容

时间:2017-10-12 18:02:56

标签: java itext

在我的iText文档中,我分散了很多表,每个表只有一行两列。我想自动缩小最左边的列以适应其内容,并展开最右边的列以填充剩余空间。

这两列的确切内容差别很大,因此无法提前确定准确的宽度应该是什么。

此屏幕截图中的所有内容都包含在一个外部表中。每个嵌套表的两列都以红色和蓝色突出显示。我想缩小红色列,尽可能缩小它们,而不会强迫文本占用更多的行。 nested table layout

在这种情况下,红色单元格的内容每个只是一个段落,但它们可能包含一个带有两个单元格的进一步嵌套表格(可能面临同样的问题)。

是否有一种简单的方法可以扩展一列并缩小另一列而不指定精确或相对宽度?

1 个答案:

答案 0 :(得分:1)

如果您正在使用iText7(并完全放弃表格进行布局),您可以通过以下示例构建此外观和布局:

输出如下: enter image description here

用于生成上述输出的代码:

 public void createPdf(String dest) throws IOException, FileNotFoundException{
    PdfWriter writer = new PdfWriter(dest);
    PdfDocument pdfDoc = new PdfDocument(writer);
    Document doc = new Document(pdfDoc);

    Paragraph p = new Paragraph();

    Text t = new Text("Date:").setBold();
    p.add(t);
    t= new Text("10/12/17").setUnderline();
    p.add(t);
    p.add(new Tab());
    p.add(createTwoPartBorderedText("Catalog Year:   ","2017"));
    p.add(new Tab());
    p.add(createTwoPartBorderedText("L Number","2019284"));

    doc.add(p);

    doc.close();
}

public Paragraph createTwoPartBorderedText(String contentOne, String contentTwo){
    Paragraph container= new Paragraph();

    Text one = new Text(contentOne).setBold();
    Border solidRed = new SolidBorder(Color.RED,1f);
    one.setBorder(solidRed);
    container.add(one);

    Text two  =new Text(contentTwo);
    two.setUnderline();
    Border solidBlue = new SolidBorder(Color.BLUE,1f);
    two.setBorder(solidBlue);
    container.add(two);
    return container;
}