单元格的文本不呈现和警告 "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));
视觉结果:
我正在使用 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));
视觉结果: