Я использую Flying Saucer для создания файлов изображений PNG с XHTML. Затем я использую другое средство для их сбора в формате PDF, а также множество других текстовых изображений.
Хотя я мог бы конвертировать нашу обработку экспорта в PDF в iText, это было бы довольно большой задачей....
Проблема в том, что некоторые XHTML-материалы, которые мне нужно разбивать по страницам, экспортируются в файлы изображений PNG. Я в порядке с простым перерывом между клипами между файлами изображений.
Здесь я использую только для того, чтобы отобразить весь контент в один файл, и он работает хорошо.
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, но как я могу отображать отдельные страницы для разделения файлов изображений?
Это запомнилось. К счастью, Graphics2DRenderer позволяет узнать, насколько велика область XHTML (ширина n высота).
Я просто перерисовываю в BufferedImage этого размера, а затем итеративно отделяю части этого полного изображения на изображения "страницы" с помощью Grahpics2D.drawImage(Image,), а затем сбрасывает их на диск.
Не самый красивый, но он работает.