无法使用 PDFBox 将图像添加到 pdf

发布于 2024-12-21 12:29:01 字数 698 浏览 1 评论 0原文

我正在编写一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

苦笑流年记忆 2024-12-28 12:29:01

一定要将该页面添加到文档中。您会想要这样做,但我也注意到,如果您在 PDJpeg 之前创建 PDPageContentStream,则 PDFBox 不会写出图像。无法解释为什么会这样,但如果你仔细查看 ImageToPDF 的源代码,那就是他们所做的。在 PDJpeg 之后创建 PDPageContentStream 并且它神奇地工作了。

...
PDJpeg img = new PDJpeg(document, in);
PDPageContentStream stream = new PDPageContentStream( doc, page );
...

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.

...
PDJpeg img = new PDJpeg(document, in);
PDPageContentStream stream = new PDPageContentStream( doc, page );
...
胡渣熟男 2024-12-28 12:29:01

看起来您只缺少一个 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.

过去的过去 2024-12-28 12:29:01

这就是 PDPageContentStream 的默认构造函数的样子:

public PDPageContentStream(PDDocument document, PDPage sourcePage) throws IOException
{
    this(document, sourcePage, AppendMode.OVERWRITE, true, false);
}

问题是 AppendMode.OVERWRITE 对我来说使用另一个带有参数 PDPageContentStream.AppendMode.APPEND 的构造函数解决了一个问题

对我来说这有效:

PDPageContentStream contentStream =
        new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, false);

this is how default constructor for PDPageContentStream looks like:

public PDPageContentStream(PDDocument document, PDPage sourcePage) throws IOException
{
    this(document, sourcePage, AppendMode.OVERWRITE, true, false);
}

Problem is AppendMode.OVERWRITE for me using another constructor with parameter PDPageContentStream.AppendMode.APPEND resolved a problem

For me this worked:

PDPageContentStream contentStream =
        new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, false);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文