10

我有一个 xhtml 文档,我正在使用飞碟将其转换为 PDF。xhtml 有几个标签,这些标签内嵌了 base64 编码的图像。xhtml 的源是动态的,因此图像标签所在的结构可能会有所不同。这是标签的样例:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAagAAAEuCAYAAADbW4YFAAAgAElEQVR4Aex9CYBdRZ ...

当我在浏览器中查看 html 时,图像显示正确,但是 img 元素不会在最终 PDF 中呈现。这是我将其渲染出来以创建 PDF 的方式。

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(builder.parse(source), "");
renderer.layout();
renderer.createPDF(response.getOutputStream(),true);

谁能让我知道我应该采取什么方法来实现这一目标?我看到了这个帖子,但是,我使用的是内联图像,所以我看不到如何使用 Edd 的解决方案来完成这个。

提前致谢

4

2 回答 2

10

是的,您可以使用此处给出的方法:Render image from servlet in flysaucer generated pdf

Edd 拥有的地方:

        InputStream input = null;
        try {
            input = ...;
            byte[] bytes = IOUtils.toByteArray(input);
            Image image = Image.getInstance(bytes);

在 Edd 的情况下,图像来自远程源(他用 跳过了该位input = ...;)。在您的情况下,您只想从 Base64 编码数据中读取它(. 之后的文本base64,。首先使用Base64 解码器将二进制数据获取到一个byte[]或流中,然后您可以使用Java ImageIO从您的字节和按照 Edd 的方法将图像转换为 PDF。在此向 Edd 致敬(请务必支持!)。

于 2012-05-31T21:26:19.243 回答
8

飞碟原生支持 data: 协议。您所要做的就是注册一个协议处理程序:

-Djava.protocol.handler.pkgs=org.xhtmlrenderer.protocols

不需要servlet whatsoverver。

于 2012-07-11T12:50:59.373 回答