0

我正在使用 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 所做的事情,但是如何将各个页面呈现为单独的图像文件?

4

1 回答 1

-1

想通了这个。幸运的是,Graphics2DRenderer 让我知道 XHTML 部分有多大(宽 n 高)。

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

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

于 2013-11-18T22:24:08.100 回答