【发布时间】:2017-02-18 07:40:45
【问题描述】:
我正在使用 PDFBox v2 将 jpg 图像转换为 PDF。 JPG 图像已经在文件系统上,所以我只需将其拾取并将其转换为 PDF。下面是我的代码
public void convertImgToPDF(String imagePath, String fileName, String destDir) throws IOException {
PDDocument document = new PDDocument();
InputStream in = new FileInputStream(imagePath);
BufferedImage bimg = ImageIO.read(in);
float width = bimg.getWidth();
float height = bimg.getHeight();
PDPage page = new PDPage(new PDRectangle(width, height));
document.addPage(page);
PDImageXObject img = PDImageXObject.createFromFile(imagePath, document);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.drawImage(img, 0, 0);
contentStream.close();
in.close();
document.save(destDir + "/" + fileName + ".pdf");
document.close();
}
这段代码可以很好地完成转换。但是,我在转换后的 PDF 中观察到以下内容
- 当我打开转换后的 PDF 时,它打开的速度非常慢(在 Acrobat 阅读器中)。似乎PDF正在逐像素打开。如果我打开任何其他 PDF,它就可以正常打开。
- 对于转换后的 PDF,acrobat 阅读器中的默认大小显示为较小的值(如 15% 或 24%,附有屏幕截图)。尽管它覆盖了 100% 的屏幕(15% 的人暗示我看到的图像要小得多,但事实并非如此)。当我将大小更改为 100% 时,我看到一个比实际图像大得多的高度模糊图像,我必须向左/向右和向上/向下滚动才能看到完整的图像。
这两个观察结果都让我觉得,由于某种原因,生成的 PDF 的分辨率比应有的要高得多。这会是一个公平的说法吗?如果是这样,我该如何纠正?
编辑 附上正在转换为 PDF 的 JPG 图像。当我打开 PDF 时,它显示的大小为 25.9%。这张图片是在 iPad 上点击的。
【问题讨论】:
-
请分享有问题的图片以重现问题。
-
new PDPage(new PDRectangle(width, height))不是一个好主意,尺寸以页面为单位,1 个单位 = 1/72 英寸。 -
谢谢@TilmanHausherr,那我应该改用什么?
-
我附上了一个示例 JPG 图片
-
@kayasa 我已经删除了我之前的评论,它更复杂,我现在自己也很困惑。我无法真正回答,但现在我认为,页面大小和图像比例应该分开看。 IE。 1) 确定页面大小,2) 确定图像显示的比例以使其适合。对于您的示例,出于某种原因,除以 3 并将图像缩放 3 效果很好。对于 A4 纸张大小,使用
new PDPage(),contentStream.drawImage(img, 0, 0, width / 6, height / 6);会留下一些空白区域。
标签: java pdf-generation pdfbox acrobat