Java PDFBox-将图像转换为PDF,PDF分辨率
我使用PDFBOXV2将jpg图像转换为PDF。JPG图像已经在文件系统中了,所以我只需要把它取出来并转换成PDF。下面是我的代码Java PDFBox-将图像转换为PDF,PDF分辨率,java,pdf-generation,pdfbox,acrobat,Java,Pdf Generation,Pdfbox,Acrobat,我使用PDFBOXV2将jpg图像转换为PDF。JPG图像已经在文件系统中了,所以我只需要把它取出来并转换成PDF。下面是我的代码 public void convertImgToPDF(String imagePath, String fileName, String destDir) throws IOException { PDDocument document = new PDDocument(); InputStream in = new FileInp
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中观察到以下情况
有一个重载的
drawImage()
方法可以实现这一点
contentStream.drawImage(PDImageXObject, float x, float y)
contentStream.drawImage(PDImageXObject, float x, float y, float height, float width)
通过在contentStream.drawImage()
上指定显式宽度和高度,可以实现这一点。例如,如果希望显示的图像小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;
float-widthRatio=bitmap.getWidth()/pageSize.getWidth();
float-heightRatio=bitmap.getHeight()/pageSize.getHeight();
scaleDownRatio=(WidthRatio请共享有问题的图像以再现问题。new PDPage(new PDRectangle(宽度、高度))
不是一个好主意,尺寸以页面单位表示,1个单位=1/72英寸。谢谢@TilmanHausherr,那么我应该用什么来代替呢?我附上了一个JPG示例image@kayasa我已经删除了我之前的评论,它更复杂了,我现在也很困惑。我真的无法回答,但现在我认为,页面大小和图像比例应该分开看。也就是说,1)决定页面大小,2)决定图像显示的比例,使其适合。对于您的示例,由于某些原因,除以3并将图像缩放3效果很好。通过使用new PDPage()
,contentStream.drawImage(img,0,0,宽/6,高/6)使用A4纸张大小代码>留下一些空白区域。