【问题标题】:How to keep headline and text in the same column using ColumnText?如何使用 ColumnText 将标题和文本保持在同一列中?
【发布时间】:2013-01-31 14:13:04
【问题描述】:

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

简单的解决方案paragraph.setKeepTogether( true ); 会产生大量空白(请参阅下面的附加信息)。这是一张图片,左边是目前的情况,右边是我想得到的:

current and wanted situation(声望...)

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

附加信息

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

【问题讨论】:

    标签: layout pdf-generation itext


    【解决方案1】:

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

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

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

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

    您会在chapter 3 中找到不同的ColumnText 示例。

    【讨论】:

      猜你喜欢
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2014-02-17
      • 2017-02-09
      • 2017-01-09
      • 1970-01-01
      相关资源
      最近更新 更多