java - 如何从 XHTML 字符串创建 Java2DRenderer?

标签 java rendering flying-saucer

我正在使用Flying Saucer从 XHTML 字符串创建图像。阅读了几个示例后,我发现我可以使用名为 Java2DRenderer 的类来做到这一点。它具有接受文件、URI 和 DOM 文档的构造函数。因此,我决定使用 DOM 文档,因为它们可以从 String 创建。另一方面,所有接受此类类型的构造函数都需要另外两个参数:宽度和高度。

例如:

    // Creates DOM document from String
    Document doc = DocumentBuilderFactory.newInstance()
        .parse(new ByteArrayInputStream(xhtmlString.getBytes()));

    //See constructor parameters: DOM document, width and height
    Java2DRenderer imageRenderer = new Java2DRenderer(doc, 
        1024, 768);

    imageRenderer.setBufferedImageType(BufferedImage.TYPE_INT_RGB);

    BufferedImage image = imageRenderer.getImage();

不幸的是,有时 xhtmlString 太大,XHTML 内容不适合 768 高度的图像。发生这种情况时,会生成截断的图像。我无法预测它,并且硬编码更高的值将使大多数图像(小图像)膨胀。

作为 Java2DRenderer 的 constructor 之一接受 java.io.File只需要求我们提供宽度(高度由 API 确定),我想我必须选择:

  1. 将 XHTML 字符串保存到文件
  2. 从 XHTML 字符串在内存中创建文件

似乎都不是好的选择。第一个会增加额外的 IO 开销,但第二个是可以接受的(如果可能的话)。我想我可以使用 Apache VFS 在内存文件中创建FileObject(它支持RAM文件系统),但它似乎与Java IO File类不兼容。我无法将 org.apache.commons.vfs2.FileObject 传递给接受 java.io.File 的构造函数。

您还建议我采取哪些其他选项来解决我的问题?

最佳答案

查看Java2DRenderer的源码,构造函数public Java2DRenderer(File file, int width)将高度初始化为-1

所以你应该打电话:

Java2DRenderer imageRenderer = new Java2DRenderer(doc, 1024, -1);

关于java - 如何从 XHTML 字符串创建 Java2DRenderer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38145101/

相关文章:

c++ - 如果我没有 VK_KHR_swapchain 扩展,我该如何运行 Vulkan API?

grails - 强制Grails升级插件使用的库的正确方法

html - 设置表格列宽小于内容

reactjs - 防止子元素不必要的重新渲染

itext - 在 PDF 中渲染图像,图像未在 PDF 查看器 0.1.8 中渲染

java - Struts 2 - 选择默认值

java - HeaderHttpSessionIdResolver 配置

java - 查找指定长度的正则表达式,并且在 Java 中也指定了开始和结束

java - KeyTyped 方法说 TextField 为空...但实际上不是

3d - 在渲染中使用三角带和三角扇有什么好处?