我正在使用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比它应该有的分辨率高得多。这是一个公平的说法吗?如果是这样,我该如何纠正这一点?
编辑附加正在转换为PDF的JPG图像。当我打开PDF时,它显示的大小为25.9%。这张图片是在iPad上点击的。
有一个重载的drapImage()
方法可以做到这一点
contentStream.drawImage(PDImageXObject, float x, float y)
contentStream.drawImage(PDImageXObject, float x, float y, float height, float width)
通过在contentStream. draImage()
上指定明确的宽度和高度,可以实现这一点。例如,如果您想显示小4倍的图像但仍保持相同的分辨率,可以使用
scaleDownRatio = 0.25;
pageSize = PDRectangle.A4;
# this will draw image at bottom left corner
PDImageXObject pageImageXObject = LosslessFactory.createFromImage(document, bitmap);
contentStream.drawImage(pageImageXObject, 0, 0, bitmap.getWidth() * ratio, bitmap.getHeight() * ratio)
# to center it you can use something like
contentStream.drawImage(pageImageXObject, (pageSize.getWidth() - bitmap.getWidth() * ratio) / 2, (pageSize.getHeight() - bitmap.getHeight() * ratio) / 2, bitmap.getWidth() * ratio, bitmap.getHeight() * ratio)
注意:在您的情况下,即使将图像缩放到四分之一的大小,图像仍然不适合;您可以通过以下方式获取缩放因子
float widthRatio = bitmap.getWidth() / pageSize.getWidth();
float heightRatio = bitmap.getHeight() / pageSize.getHeight();
scaleDownRatio = (widthRatio<heightRatio)? widthratio:heightRatio;