- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用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 确定),我想我必须选择:
似乎都不是好的选择。第一个会增加额外的 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/
我是一名优秀的程序员,十分优秀!