我有一个xhtml文档,我正在使用flyingsaucer变成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的解决方案来实现这一目标。
提前致谢
答案 0 :(得分:9)
是的,您可以使用此处给出的方法: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在这里(肯定是upvote!)。
答案 1 :(得分:7)
Flying-Saucer本身支持数据:协议。您所要做的就是注册一个协议处理程序:
-Djava.protocol.handler.pkgs=org.xhtmlrenderer.protocols
无论如何都不需要servlet。