如何在 iText JAVA 中给出列宽的固定百分比值

问题描述

在这里,我使用 iText 7 来处理几代 pdf。我已使用 100% 设置表格宽度 table.setWidthPercent(100) 并且我想要固定的列宽,以百分比表示。

我设置列宽如下

 float columnWidth[] = {33,34,33};
 Table table = new Table(columnWidth);

但是当我们执行时它不是百分比,它会给出具有此相对宽度的 3 列,但是当我们为最后一个单元格提供左边距时,这一列会中断。

每个单元格的左边距、右边距都影响列宽我想要以百分比为单位的固定列大小

这是我的全部代码输出图像。

        String pdfPath = "first.pdf";
        PdfWriter pdfWriter = new PdfWriter(pdfPath);
        PdfDocument pdfDocument = new PdfDocument(pdfWriter);
        Document document = new Document(pdfDocument);
        pdfDocument.setDefaultPageSize(PageSize.A4);
        document.setMargins(20,20,20);

        float columnWidth[] = {33,33};
        Table table = new Table(columnWidth);
        table.setWidthPercent(100);
        table.addCell(new Cell().add("First").setFontSize(7).setMargins(0,0));
        table.addCell(new Cell().add("Second").setFontSize(7).setMargins(0,0));
        table.addCell(new Cell().add("Third").setFontSize(7).setMargins(0,50));
        document.add(table);
        document.close();
        System.out.println("pdf created");

这是上面代码输出

This one is output of above code

即使应用左边距也需要固定的列大小。它应该只影响文本而不是列这里列大小正在改变

想要这种行为:

Want this type of behaviour

解决方法

而不是直接给出浮点值

  float columnWidth[] = {33,34,33};
  Table table = new Table(columnWidth);

UnitValue 解决了我的疑问

 Table table = new Table(UnitValue.createPercentArray(columnWidth));

现在列宽是固定的。单元格边距不会影响列宽。