【发布时间】:2018-12-07 15:27:04
【问题描述】:
我用 iText7 测试了一些东西,我有一个场景,我需要在顶部有 DocumentRenderer 段落,然后在同一页面上启动 ColumnDocumentRender 并在其正下方有 2 列。我遇到的问题是,当我更改同一页面上的内容时,它会将 DocumentRenderer 中的内容与 ColumnDocumentRenderer 中的内容重叠。我相信这是因为一个渲染器不知道另一个渲染器,并且内容从页面顶部开始。我关注了this tutorial,但它只显示了如何将内容添加到下一页。它确实说
我们必须指示 iText 不要将内容刷新到 输出流
但是谁能告诉我我们是如何做到这一点的?
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
Document document = new Document(pdf);
Paragraph p = new Paragraph()
.add("Be prepared to read a story about a London lawyer "
+ "named Gabriel John Utterson who investigates strange "
+ "occurrences between his old friend, Dr. Henry Jekyll, "
+ "and the evil Edward Hyde.");
document.add(p);
document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
... // Define column areas
document.setRenderer(new ColumnDocumentRenderer(document, columns));
document.add(new AreaBreak(AreaBreakType.LAST_PAGE));
... // Add novel in two columns
document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
document.setRenderer(new DocumentRenderer(document));
document.add(new AreaBreak(AreaBreakType.LAST_PAGE));
p = new Paragraph()
.add("This was the story about the London lawyer "
+ "named Gabriel John Utterson who investigates strange "
+ "occurrences between his old friend, Dr. Henry Jekyll, "
+ "and the evil Edward Hyde. THE END!");
document.add(p);
document.close();
}
我需要这样的东西:
每当你创建一个新的 DocumentRenderer 时,iText 开始返回到 文档的顶部——即:从第一页开始。这让你 在彼此相邻的同一文档上使用不同的渲染器 同一页。如果需要,我们将不得不指示 iText 不要这样做 将内容刷新到 OutputStream;否则我们将无法访问 到前几页。在这种情况下,我们不需要更改任何内容 前几页。我们只想在下一个切换到另一个渲染器 页。引入到最后一页的分页符将避免 新内容会覆盖旧内容。
【问题讨论】:
-
我现在正在考虑的一个解决方案是在整个过程中使用 ColumnDocumentRenderer 并将列号设置为顶部的 1,然后将列号设置为底部的 2。我不知道这是否会有所帮助,但只是考虑是否可能。
-
我尝试重现您的问题,但要么我误解了问题,要么我无法重现问题。请评论我的回答。
-
@BrunoLowagie 有什么我可以研究的解决方案吗? MultiColumnText 为旧版本的 iText 做到了这一点。 i.stack.imgur.com/s53A0.png
标签: java pdf itext renderer itext7