使用Flying Saucer将HTML分页到PNG图像文件

时间:2013-11-08 19:27:36

标签: html image flying-saucer

我正在使用Flying Saucer从XHTML创建PNG图像文件。然后我使用另一个工具将这些收集到PDF中,以及一堆其他文本图像。

虽然我可以将PDF导出处理转换为iText,但这将是一项相当大的工作....

我遇到的问题是,在导出到PNG图像文件时,我需要对一些XHTML内容进行分页。我只是在图像文件之间只有一个简单的“剪辑式”中断。

以下是我用于将整个内容呈现为单个文件的方法,而且效果很好。

File file = File.createTempFile("AAA", "." + suffix);
XHTMLPanel panel = new XHTMLPanel();
panel.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

InputStream is = <create content>;

panel.setDocument(is, "");

Graphics2DRenderer renderer = new Graphics2DRenderer();
renderer.setDocument(panel.getDocument(),"");

BufferedImage img = new BufferedImage(DEFAULT_WIDTH,
         DEFAULT_HEIGHT, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = (Graphics2D) img.getGraphics();
graphics.setColor(Color.white);
graphics.fillRect(0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT);

renderer.layout(graphics,null);         
renderer.render(graphics);

ImageIO.write(img, suffix, file);

然而,我的一些内容“跨越”几页并且上面的处理只显示了最高DEFAULT_HEIGHT像素并剪切了剩余部分。

有没有办法'迭代'通过面板内容(垂直)和渲染,比如X像素的内容到唯一的图像文件?这就是ITextRenderer所做的,但是如何将各个页面呈现为单独的图像文件?

1 个答案:

答案 0 :(得分:-1)

搞清楚了。幸运的是,Graphics2DRenderer让我知道XHTML部分的大小(宽度n高度)。

我只是重新渲染到那个大小的BufferedImage,然后使用Grahpics2D.drawImage(Image ,,)迭代地将整个图像的一部分剥离成“页面”图像,然后将它们转储到磁盘上。

不是最漂亮的,但它确实有效。