我搜索了多个相似的帖子,并尝试了各种配置来实现此目的,但无法使其与最新的iText 7库一起使用。
已经回答了多个这样的问题,但是这些要求与我的要求不完全相同,因此在将其标记为重复项之前,请先阅读所有要求。
我的要求是生成一个包含多个图像的PDF文档,每个图像都位于单个页面的左上角(默认页边距为36个单位之后)。例如如果有5张图像,则生成的pdf将有5页(A4大小),每页在页面顶部包含一张图像。
我从以下链接提供的iText 7示例开始,以生成多个页面。
https://itextpdf.com/en/resources/examples/itext-7/multiple-images
我所做的更改是
设置“自动缩放”为真
Image image = new Image(imageData).setAutoScale(true);
添加具有默认尺寸的新页面。
pdfDocument.addNewPage(i+1);
但是在上面给出的示例中,链接在每页的左下角添加了图像。因此,我首先尝试计算底部位置,但使用getImageScaledHeight()
减去图像的高度。此方法返回以像素为单位而不是以用户单位为单位的图像高度,因此它仍然在顶部留有一些空白。
我尝试了另一种方法,即设置pageNumber(i+1)
和setMarginTop(0)
。但是,当您设置页边距时,页码似乎没有任何作用,所有图像都在首页上一个接一个地添加。
如果有人能提供最佳方法或解决方法,我将非常感谢。
PDF #1-Without auto scale flag #2 Auto scale set true on image
答案 0 :(得分:1)
我想出了解决此问题的方法。我希望其他可能遇到类似问题的人也可以从我的解决方案中受益,因此我将其发布为答案,而不是对我的问题发表评论。
因此,如果使用getImageScaledHeight()
启用了自动缩放功能,那么setAutoScale(true)
方法将不起作用。自动缩放将发生,但要等到将图像添加到文档中之后才能进行,但是要设置图像在页面顶部的位置,我们需要在调用以下方法时将图像的缩放高度设置为
image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
要使图像缩放以适合页面大小并将其放置在页面上的所需位置,您需要
首先使用方法image.scaleToFit(fitWidth, fitHeight)
缩放图像,然后使用缩放比例计算底部位置
使用缩放的图像高度(image.getImageScaledHeight()
)和页面高度来计算底部位置。
现在,如果要在pdf中留有页边距,则必须更改代码以缩放图像并相应地设置固定位置。以下是两种情况下解决方案的代码示例。
image.scaleToFit(pdfA4usableWidth, pdfA4usableHeight);
image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
Click here to see code sample with console output
float leftMargin = document.getLeftMargin(), rightMargin = document.getRightMargin();
float topMargin = document.getTopMargin(), bottomMargin = document.getBottomMargin();
float pdfA4usableWidth = PageSize.A4.getWidth() - leftMargin - rightMargin;
float pdfA4usableHeight = PageSize.A4.getHeight() - topMargin - bottomMargin;
System.out.println("A4 usable width: "+pdfA4usableWidth+", usable height: "+pdfA4usableHeight);
image.scaleToFit(pdfA4usableWidth, pdfA4usableHeight);
image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
Click here to see code sample with console output
已生成PDF ...
Image added to PDF with no margins
Image added to PDF with default margins
注意:
答案 1 :(得分:0)