单元格的文本不呈现和警告 "Element does not fit current area"

Cells' text does not render and warning "Element does not fit current area"

我正在使用 iText 7.2.0(Java 8,Windows Server 2016)制作 table。

table需要不溢出(比页面宽),但必要时可以在单词中间打断单元格事件。

部分单元格文本未呈现,我收到此警告:

[main] WARN com.itextpdf.layout.renderer.RootRenderer - Element does not fit current area.

如果我稍微更改一下文本(例如将“i”替换为“I”),它就会起作用。

我该如何解决?是我的代码还是 iText 中的错误?

import java.io.FileNotFoundException;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.Style;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.properties.UnitValue;

public class Main {
    private static void makeCell(Table table, Style style, String text) {
        Cell c = new Cell();
        Paragraph p = new Paragraph();
        Text t = new Text(text);
        c.addStyle(style);
        p.add(t);
        c.add(p);
        table.addCell(c);
    }
    
    public static void main(String[] args) throws FileNotFoundException {
        PdfWriter writer = new PdfWriter("C:\Temp\test.pdf");
        PdfDocument pdf = new PdfDocument(writer);
        try (Document document = new Document(pdf)) {
            Style style = new Style().setBold();
            Table table = new Table(UnitValue.createPercentArray(9));
            table.useAllAvailableWidth();
            table.setFixedLayout();
            
            makeCell(table, style, "Description");
            makeCell(table, style, "DescrIption"); /* Capital I */
            makeCell(table, style, "Description");
            makeCell(table, style, "Description");
            makeCell(table, style, "Description");
            makeCell(table, style, "DescrIption"); /* Capital I */
            makeCell(table, style, "Description");
            makeCell(table, style, "Description");
            makeCell(table, style, "Description");
            
            document.add(table);
        }
    }
}

Result - 带有“Description”的单元格不呈现,带有“DescrIption”的单元格呈现。

这似乎是 iText 中的错误。

作为解决方法,您可以提供适当的粗体字体,而不是使用 setBold() 的粗体模拟。事实上,提供适当的粗体字体是使文本看起来粗体的推荐方法,因为粗体模拟会在输出质量方面产生较差的结果。

唯一的修改需要在您的 Style 对象中完成,因为您已经使用了正确重用的样式!

Style style = new Style().setFont(PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD));

视觉结果: