如何使用ColumnText将标题和文本保留在同一列中?

时间:2013-01-31 14:13:04

标签: layout pdf-generation itext

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

简单的解决方案paragraph.setKeepTogether( true );会产生很大的空白区域(请参阅下面的其他信息)。这是一张图片,显示了左边的当前情况以及我想要在右边看到的内容:

current and wanted situation(声誉......)

我最大的问题之一是,columnText.getYLine()返回“origin”列中的最低位置,即使文本流向下一个。 我查看了iText网站上的示例以及“itext column”和一些博客的stackoverflow上的所有结果,但除了printing each article in a new column之外没有找到任何解决我问题的方法。用几句话简单描述问题就可以帮助我找到自己,因为英语不是我的第一语言。

其他信息

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

1 个答案:

答案 0 :(得分:0)

setKeepTogether()方法不应与ColumnText结合使用。正如我的书中所述(我的头像中显示的那个),可以在similation mode中使用ColumnText类来微调布局。

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

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

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

您会在chapter 3中找到不同的go()个例子。