使用pdfbox将A4图像定位为PDF文件中的页面

时间:2019-06-16 06:30:59

标签: java pdfbox

我有一个jpg文件:2480 x 3508像素,适合4A大小。 我需要将此文件放入pdf文件中。

PDDocument doc = new PDDocument();
ByteArrayOutputStream os = new ByteArrayOutputStream();
InputStream certificate = getClass().getResourceAsStream("certificate.jpg");
BufferedImage bi = ImageIO.read(certificate);
PDPage page = new PDPage(PDRectangle.A4);//<<---- A4
doc.addPage(page);

PDImageXObject pdImageXObject = LosslessFactory.createFromImage(doc, bi);
PDPageContentStream contentStream = new PDPageContentStream(doc, page, 
PDPageContentStream.AppendMode.APPEND, false);
contentStream.drawImage(pdImageXObject, 0, -10);
contentStream.close();
doc.save( "c://appfiles//PDF_image.pdf" );
doc.close();

问题在于生成的文件已完全关闭并且不适合PDF中的A4大小。

源文件:https://i.stack.imgur.com/a0ZHG.jpg
生成的文件:https://www.dropbox.com/s/ufo3246b6eoz3f5/PDF_image.pdf?dl=1

我知道我可以使用宽度和高度,但是打印质量下降了,我认为PDRectangle.A4旨在防止这种操作。

如何使2480 x 3508 pixels适应PDRectangle.A4 pdf页面?

谢谢

1 个答案:

答案 0 :(得分:1)

PDF的尺寸为72 dpi,

System.out.println(PDRectangle.A4); // output is [0.0,0.0,595.27563,841.8898]

您的图像为300 dpi,因此必须缩放:

contentStream.drawImage(pdImageXObject, 0f, -10f, 
        pdImageXObject.getWidth() / 300f * 72, 
        pdImageXObject.getHeight() / 300f * 72);

我还建议使用JPEGFactory.createFromStream(),它更快,更小并且直接使用jpeg流。结果PDF文件为580 KB而不是2555 KB。