如何从 XHTML 字符串创建 Java2DRenderer?
How to create a Java2DRenderer from a XHTML String?
我正在使用 Flying Saucer to create images from XHTML strings. After reading a couple of examples, I found I can do this using a class called 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 accepts a java.io.File 之一,只要求我们提供宽度(高度由 API 决定),我想我必须选择:
- 将 XHTML 字符串保存到文件
- 从 XHTML 字符串在内存中创建文件
似乎都不是好的选择。第一个会增加额外的 IO 开销,但第二个是可以接受的(如果可能的话)。我以为我可以使用 Apache VFS FileObject(它支持 RAM 文件系统)在内存中创建文件,但它似乎与 Java IO 文件 class 不兼容。我无法将 org.apache.commons.vfs2.FileObject
传递给接受 java.io.File
.
的构造函数
您可以建议我使用哪些其他选项来解决我的问题?
查看Java2DRenderer
的源代码,构造函数public Java2DRenderer(File file, int width)
将高度初始化为-1
。
所以你应该调用:
Java2DRenderer imageRenderer = new Java2DRenderer(doc, 1024, -1);
我正在使用 Flying Saucer to create images from XHTML strings. After reading a couple of examples, I found I can do this using a class called 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 accepts a java.io.File 之一,只要求我们提供宽度(高度由 API 决定),我想我必须选择:
- 将 XHTML 字符串保存到文件
- 从 XHTML 字符串在内存中创建文件
似乎都不是好的选择。第一个会增加额外的 IO 开销,但第二个是可以接受的(如果可能的话)。我以为我可以使用 Apache VFS FileObject(它支持 RAM 文件系统)在内存中创建文件,但它似乎与 Java IO 文件 class 不兼容。我无法将 org.apache.commons.vfs2.FileObject
传递给接受 java.io.File
.
您可以建议我使用哪些其他选项来解决我的问题?
查看Java2DRenderer
的源代码,构造函数public Java2DRenderer(File file, int width)
将高度初始化为-1
。
所以你应该调用:
Java2DRenderer imageRenderer = new Java2DRenderer(doc, 1024, -1);