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

Java 使用pdfbox将A4图像定位为PDF文件内的页面,java,pdfbox,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.rea

我有一个文件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();
PDDocument doc=新的PDDocument();
ByteArrayOutputStream os=新建ByteArrayOutputStream();
InputStream certificate=getClass().getResourceAsStream(“certificate.jpg”);
BuffereImage bi=ImageIO.read(证书);

PDPage page=新的PDPage(PD矩形.A4)// 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。

链接指向“404未找到页面”