使用来自html的Flying-Saucer渲染PDF格式的嵌入图像

It *_*unt 8 java pdf-generation embedded-resource flying-saucer xhtmlrenderer

我有一个xhtml文档,我正在使用flyingsaucer变成PDF.xhtml有几个标签,内嵌base64编码图像.xhtml的来源是动态的,因此图像标签所在的结构可能会有所不同.这是标签的样子:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAagAAAEuCAYAAADbW4YFAAAgAElEQVR4Aex9CYBdRZ ...
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中查看html时,图像显示正确,但是,img元素不会在最终的PDF中呈现.以下是我如何渲染它来创建PDF.

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(builder.parse(source), "");
renderer.layout();
renderer.createPDF(response.getOutputStream(),true);
Run Code Online (Sandbox Code Playgroud)

任何人都可以让我知道我应该采取什么方法来实现这一目标?我看到了这个帖子,但是,我正在使用内联图像,所以我看不出如何使用Edd的解决方案来实现这一点.

提前致谢

Mal*_*ith 9

是的,您可以使用此处给出的方法:在flyingsaucer生成的pdf中从servlet渲染图像

Edd在哪里:

        InputStream input = null;
        try {
            input = ...;
            byte[] bytes = IOUtils.toByteArray(input);
            Image image = Image.getInstance(bytes);
Run Code Online (Sandbox Code Playgroud)

在Edd的情况下,图像来自远程源(他跳过那个位input = ...;).在你的情况,你只是想从您的Base64编码的数据读它(后文base64,首先使用Base64编码解码器,以获得二进制数据,进入byte[]或流,然后你可以使用的Java的ImageIO,创建从字节的图像和按照Edd的方法将图像转换为PDF.感谢Edd在这里(肯定是upvote!).

  • 我能够使用这种方法让它工作.谢谢! (2认同)

小智 7

Flying-Saucer支持数据:本地协议.您所要做的就是注册一个协议处理程序:

-Djava.protocol.handler.pkgs=org.xhtmlrenderer.protocols
Run Code Online (Sandbox Code Playgroud)

无论如何都不需要servlet.

  • 您是否有关于协议处理程序注册方式的链接? (2认同)