【问题标题】:Render embedded image in PDF using Flying-Saucer from html使用来自 html 的 Flying-Saucer 在 PDF 中渲染嵌入的图像
【发布时间】:2012-05-31 20:40:47
【问题描述】:

我有一个 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);

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

提前致谢

【问题讨论】:

标签: java pdf-generation embedded-resource flying-saucer xhtmlrenderer


【解决方案1】:

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

Edd 拥有的地方:

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

在 Edd 的情况下,图像来自远程源(他用input = ...; 跳过了那个位)。在您的情况下,您只想从 Base64 编码数据中读取它(base64, 之后的文本。首先使用Base64 decoder 获取二进制数据,进入byte[] 或流,然后您可以使用Java ImageIO从您的字节创建图像并按照 Edd 的方法将图像放入 PDF。在这里向 Edd 致敬(肯定会投票!)。

【讨论】:

    【解决方案2】:

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

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

    不需要 servlet whatsoverver。

    【讨论】:

    • 你有如何注册协议处理程序的链接吗?
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2011-10-23
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2014-02-03
    • 2023-03-14
    相关资源
    最近更新 更多