1

我正在使用 iText 创建 PDF 文件。在测试时,出现了一种情况,标题打印在一列的底部,而附加文本在下一列。

简单的解决方案paragraph.setKeepTogether( true );会产生大量空白(请参阅下面的附加信息)。这是一张图片,左侧显示了当前情况,右侧显示了我想要获得的内容:

当前和想要的情况(声誉......)

我最大的问题之一是,columnText.getYLine()即使文本流到下一个,也会返回“原点”列中的最低位置。我查看了 iText 站点上的示例以及 stackoverflow 上“itext column”的所有结果以及一些博客,但没有找到任何解决我的问题的方法,除了在新列中打印每篇文章。用几句话简明地描述问题将帮助我搜索自己,因为英语不是我的第一语言。

附加信息

这是远程医疗项目中报告生成的一部分。页面模板由 Web 前端填充。有几个后处理步骤,例如附加心电图输出的图像。这些需要高像素密度才能读取,这就是我使用 iText 的原因(afaik pdfbox 在不考虑密度的情况下进行缩放)。前段时间,医生注意到他们必须插入比一页空间更多的文本。所以他们希望在附录中溢出。我可以使用另一个库。重要性在于纸上的高可读性和像 (l)gpl/apache/ 这样的许可证...空白会导致更多页面,因此减少了概述并浪费了纸张。

4

1 回答 1

0

setKeepTogether()方法不应该与ColumnText. 正如我的书中所述(我的头像中显示的那个),ColumnText可以在模拟模式下使用该类来微调布局。

这个想法是您在试错过程中定义内容的位置。首先,您添加内容并调用go(true);这将消耗您列中的内容,但不会将任何内容添加到您的文档中。您可以使用它来发现已经写入了多少行 ( getLinesWritten()),检查是否可以呈现所有内容 ( hasMoreText()) 等等。

假设您发现所有文本都可以使用可用空间写入,您再次将内容添加到列中,将 Y 位置更改为其原始值,并实际添加列:go();

如果列中还有内容,您应该创建一个新列,重新添加内容,然后再做出决定。更改列的位置 和go();如果还有内容,但内容可以分成两部分,更改 Y 位置和go(); 然后更改列的位置并go()再次调用以将其余内容呈现在不同的列中。

您将在第 3 章ColumnText中找到不同的示例。

于 2013-02-01T11:56:23.467 回答