无法使用 PDFBox 将图像添加到 pdf
我正在编写一个 Java 应用程序,它使用 pdfbox 库从头开始创建 pdf。
我需要在其中一个页面中放置一张 jpg 图像。
我正在使用此代码:
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
/* ... */
/* code to add some text to the page */
/* ... */
InputStream in = new FileInputStream(new File("c:/myimg.jpg"));
PDJpeg img = new PDJpeg(document, in);
contentStream.drawImage(img, 100, 700);
contentStream.close();
document.save("c:/mydoc.pdf");
当我运行代码时,它成功终止,但如果我使用 Acrobat Reader 打开生成的 pdf 文件,页面是完全白色的,并且图像未放置在其中。
相反,文本正确放置在页面中。
关于如何将我的图像放入 pdf 中的任何提示?
I'm writing a java app that creates a pdf from scratch using the pdfbox library.
I need to place a jpg image in one of the page.
I'm using this code:
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
/* ... */
/* code to add some text to the page */
/* ... */
InputStream in = new FileInputStream(new File("c:/myimg.jpg"));
PDJpeg img = new PDJpeg(document, in);
contentStream.drawImage(img, 100, 700);
contentStream.close();
document.save("c:/mydoc.pdf");
When I run the code, it terminates successfully, but if I open the generated pdf file using Acrobat Reader, the page is completely white and the image is not placed in it.
The text instead is correctly placed in the page.
Any hint on how to put my image in the pdf?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一定要将该页面添加到文档中。您会想要这样做,但我也注意到,如果您在 PDJpeg 之前创建 PDPageContentStream,则 PDFBox 不会写出图像。无法解释为什么会这样,但如果你仔细查看 ImageToPDF 的源代码,那就是他们所做的。在 PDJpeg 之后创建 PDPageContentStream 并且它神奇地工作了。
Definitely add the page to the document. You'll want to do that, but I've also noticed that PDFBox won't write out the image if you create the PDPageContentStream BEFORE the PDJpeg. It's unexplained why this is so, but if you look close at the source of ImageToPDF that's what they do. Create the PDPageContentStream after PDJpeg and it magically works.
看起来您只缺少一个
document.addPage(page)
调用。另请参阅 ImageToPDF PDFBox 中的示例类,用于一些示例代码。
Looks like you're missing just a
document.addPage(page)
call.See also the ImageToPDF example class in PDFBox for some sample code.
这就是 PDPageContentStream 的默认构造函数的样子:
问题是 AppendMode.OVERWRITE 对我来说使用另一个带有参数 PDPageContentStream.AppendMode.APPEND 的构造函数解决了一个问题
对我来说这有效:
this is how default constructor for PDPageContentStream looks like:
Problem is AppendMode.OVERWRITE for me using another constructor with parameter PDPageContentStream.AppendMode.APPEND resolved a problem
For me this worked: