Я использую Flying Saucer для создания изображений из строк XHTML. Прочитав несколько примеров, я обнаружил, что могу сделать это, используя класс под названием Java2DRenderer. В нем есть конструкторы, которые принимают файлы, URI и документы DOM. Поэтому я решил использовать документы DOM, потому что они могут быть созданы из String. С другой стороны, для всех конструкторов, которые принимают такой тип, требуются два других параметра: ширина и высота.Как создать Java2DRenderer из строки XHTML?
Например:
// 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), я думаю, что я должен вариантов:
- Сохранить XHTML строки в файлы
- Создание в памяти Файлы из строк XHTML
Не похоже, что это хорошие варианты. Первый из них действительно добавляет дополнительные служебные данные ввода-вывода, но второй будет приемлемым (если возможно). Я думал, что могу создать в файлах памяти файл Apache VFS FileObject (он поддерживает файловые системы RAM), но, похоже, он не совместим с классом Java IO File. Я не могу передать org.apache.commons.vfs2.FileObject
конструктору, который принимает java.io.File
.
Какие еще варианты вы могли бы предложить мне решить мою проблему?