如何获取在 IText 7 中写入的行数
How to get the number of lines written in IText 7
我正在从 IText 5 升级到 IText 7。下面的代码来自版本 5,它具有获取实际写入行数的方法。我如何使用 IText 7 完成相同的操作?
Paragraph p = new Paragraph(veryLongText, font);
ColumnText column1 = new ColumnText(writer.DirectContent);
column1.SetSimpleColumn(bottomX, bottomY, topX, 100);
column1.AddElement(p);
column1.Go(true);
noOfLines = column1.LinesWritten; <---- No of Lines
iText 7 中的布局机制比 iText 5 中的机制复杂得多且功能丰富,并且在许多复杂的布局情况下,书写行的概念可能非常基于意见。这就是布局引擎不维护写入行数且不可查询的原因。但是,很容易扩展 elements/renderers 以支持计算写入行数。这是如何做的。首先,您需要覆盖 Paragraph
来汇总行数,并覆盖 ParagraphRenderer
来提供写回 Paragraph
:
的行信息
private static class LineCountingParagraph extends Paragraph {
private int linesWritten = 0;
public LineCountingParagraph(String text) {
super(text);
}
public void addWrittenLines(int toAdd) {
linesWritten += toAdd;
}
public int getNumberOfWrittenLines() {
return linesWritten;
}
@Override
protected IRenderer makeNewRenderer() {
return new LineCountingParagraphRenderer(this);
}
}
private static class LineCountingParagraphRenderer extends ParagraphRenderer {
public LineCountingParagraphRenderer(LineCountingParagraph modelElement) {
super(modelElement);
}
@Override
public void drawChildren(DrawContext drawContext) {
((LineCountingParagraph)modelElement).addWrittenLines(lines.size());
super.drawChildren(drawContext);
}
@Override
public IRenderer getNextRenderer() {
return new LineCountingParagraphRenderer((LineCountingParagraph) modelElement);
}
}
现在,只需使用自定义的 类 而不是标准的 Document
或 Canvas
:
添加元素后查询信息
LineCountingParagraph p = new LineCountingParagraph("text");
document.add(p);
System.out.println(p.getNumberOfWrittenLines());
请注意,此机制还允许您计算满足某些条件的写入行数。您可以分析 lines
列表中的元素。
我正在从 IText 5 升级到 IText 7。下面的代码来自版本 5,它具有获取实际写入行数的方法。我如何使用 IText 7 完成相同的操作?
Paragraph p = new Paragraph(veryLongText, font);
ColumnText column1 = new ColumnText(writer.DirectContent);
column1.SetSimpleColumn(bottomX, bottomY, topX, 100);
column1.AddElement(p);
column1.Go(true);
noOfLines = column1.LinesWritten; <---- No of Lines
iText 7 中的布局机制比 iText 5 中的机制复杂得多且功能丰富,并且在许多复杂的布局情况下,书写行的概念可能非常基于意见。这就是布局引擎不维护写入行数且不可查询的原因。但是,很容易扩展 elements/renderers 以支持计算写入行数。这是如何做的。首先,您需要覆盖 Paragraph
来汇总行数,并覆盖 ParagraphRenderer
来提供写回 Paragraph
:
private static class LineCountingParagraph extends Paragraph {
private int linesWritten = 0;
public LineCountingParagraph(String text) {
super(text);
}
public void addWrittenLines(int toAdd) {
linesWritten += toAdd;
}
public int getNumberOfWrittenLines() {
return linesWritten;
}
@Override
protected IRenderer makeNewRenderer() {
return new LineCountingParagraphRenderer(this);
}
}
private static class LineCountingParagraphRenderer extends ParagraphRenderer {
public LineCountingParagraphRenderer(LineCountingParagraph modelElement) {
super(modelElement);
}
@Override
public void drawChildren(DrawContext drawContext) {
((LineCountingParagraph)modelElement).addWrittenLines(lines.size());
super.drawChildren(drawContext);
}
@Override
public IRenderer getNextRenderer() {
return new LineCountingParagraphRenderer((LineCountingParagraph) modelElement);
}
}
现在,只需使用自定义的 类 而不是标准的 Document
或 Canvas
:
LineCountingParagraph p = new LineCountingParagraph("text");
document.add(p);
System.out.println(p.getNumberOfWrittenLines());
请注意,此机制还允许您计算满足某些条件的写入行数。您可以分析 lines
列表中的元素。