我有一个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页面?
谢谢
答案 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。