首先这个:如果 png 存储为"C:/DATASTORE/slide-"+(i+1)+".png"
不正确,PDF 中的幻灯片也不正确。
和这个:您的代码片段没有向我们展示您如何创建Document
目的。默认情况下,页面尺寸为 A4 纵向。不用说,大于 595 x 842 的图像不适合该页面。
现在给出答案:有两种方法可以解决这个问题。
您可以更改图像的大小(not with setWidthPercentage()
unless您已经计算了实际百分比)并将其添加到位置 (0, 0),以便它不考虑边距。例如:
image.scaleToFit(595, 842);
image.setAbsolutePosition(0, 0);
doc.add(image);
doc.newPage();
更好的解决方案是使页面的大小适应图像的大小。
Document doc = new Document(new Rectangle(image.getScaledWidth(), image.getScaledHeight()));
// create a writer, open the document
image.setAbsolutePosition(0, 0);
doc.add(image);
doc.newPage();
如果图像的大小不同,您可以在添加图像时更改页面大小,如下所示:
doc.setPageSize(new Rectangle(image.getScaledWidth(), image.getScaledHeight()));
doc.newPage();
image.setAbsolutePosition(0, 0);
doc.add(image);
重要的是要了解新的页面大小只有在以下时间后才会生效doc.newPage();
注意事项 1:如果您的 PDF 仅包含最后一张幻灯片,则您可能将所有幻灯片放在同一页面上,而最后一张幻灯片将所有幻灯片覆盖。您需要调用newPage()
每次添加图像时的方法(如我答案中的代码片段中所做的那样)。
注意事项 2:你的指控是错误的。根据API文档,有一个方法setPageSize(Rectangle rect) http://api.itextpdf.com/itext/com/itextpdf/text/Document.html#setPageSize%28com.itextpdf.text.Rectangle%29,也许你用错了Rectangle
班级。如果您没有听从我的建议(恕我直言,这并不明智),您可能正在寻找com.lowagie.text.Rectangle
代替java.awt.Rectangle
.
注意事项 3:这和CAVEAT 2类似,类中确实没有这样的方法java.awt.Image
,但正如 API 文档中记录的那样,该类com.itextpdf.text.Image
has a getScaleWidth() http://api.itextpdf.com/itext/com/itextpdf/text/Image.html#getScaledWidth%28%29方法和一个getScaledHeight() http://api.itextpdf.com/itext/com/itextpdf/text/Image.html#getScaledHeight%28%29 method.