gpt4 book ai didi

java - iTextPDF : Set page size of PDF according to the size of the image to be inserted

转载 作者:行者123 更新时间:2023-11-29 05:01:57 24 4
gpt4 key购买 nike

我正在使用 iTextPDF 为在 TestNG 中开发的 Selenium WebDriver 脚本生成 PDF 报告。

报告将包含文本 block (字符串)和图像。图像之前总是包含一个文本 block 。

我面临的问题是,在创建文档时,文本 block 和图像 block 在测试用例中以错误的出现顺序显示。我相信这是因为要插入的图像的尺寸大于 PDF 页面。

考虑一个场景,测试中出现的顺序如下

文本 block 1

图片1

文本 block 2

文本 block 3

图片2

'文本 block 4'

但 PDF 显示为

文本 block 1

图片1

文本 block 2

文本 block 3

文本 block 4

图片2

  1. 我的代码没有错。我已经对它进行了三次检查。

  2. 不,我不能发布代码,因为它很大(>500 行)并且在我公司的系统中。

我想知道是否可以创建一个PDF页面,然后在遇到要插入的图片很大时动态改变它的大小。

最佳答案

你的代码没有错。当图像不适合并且图像后面有文本时,将推迟添加图像。您可以使用以下行更改此行为:

writer.setStrictImageSequence(true);

在这种情况下,writer 是您的 PdfWriter 实例。

这解决了一个问题:文本和图像的顺序现在是正确的。但是,由于图像大小的原因,您最终会在文档中留出大量空白区域,因为不适合的图像会触发新页面。

您可以尝试通过更改页面大小来解决此问题。这涉及使用 setPageSize() 方法,如我对这个问题的回答所述:iText create document with unequal page sizes

如果您想将页面大小与图像大小相匹配,请查看我对这个问题的回答:Add multiple images into a single pdf file with iText using java

Image 类扩展了 Rectangle,我们可以在创建 Document 时使用 Image 对象作为参数> 实例,或者我们可以在更改页面大小时使用 Image 对象:

document.setPageSize(img);
document.newPage();

重要提示:当您更改页面大小时,新的大小只会在下一页生效。您不能更改当前页面的大小(它已经被初始化并且在初始化后更改它可能会搞砸已经添加的内容)。

另外:将页面大小更改为图像大小是不够的,因为您还要添加文本。您可以在模拟模式下使用 ColumnText 来找出文本需要多少空间,然后在创建后再次使用 ColumnText 真正添加文本大小可容纳文本和图像的页面。

参见 Can I tell iText how to clip text to fit in a cell并寻找 getYLine() 方法。

我想知道您是否可以更轻松地缩小图像以使其适合页面...当然:如果图像的大小可以变化,您将面临大图像会变得难以辨认。

附言我提到的所有答案也可以在免费电子书中找到 The Best iText Questions on StackOverflow .我在本书中捆绑了数百个答案,以便在回答新问题时可以轻松搜索已回答的问题。

关于java - iTextPDF : Set page size of PDF according to the size of the image to be inserted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31816693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com