2016-07-01 1 views
0

Я использую 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), я думаю, что я должен вариантов:

  1. Сохранить XHTML строки в файлы
  2. Создание в памяти Файлы из строк XHTML

Не похоже, что это хорошие варианты. Первый из них действительно добавляет дополнительные служебные данные ввода-вывода, но второй будет приемлемым (если возможно). Я думал, что могу создать в файлах памяти файл Apache VFS FileObject (он поддерживает файловые системы RAM), но, похоже, он не совместим с классом Java IO File. Я не могу передать org.apache.commons.vfs2.FileObject конструктору, который принимает java.io.File.

Какие еще варианты вы могли бы предложить мне решить мою проблему?

ответ

1

Исключая исходный код Java2DRenderer, конструктор public Java2DRenderer(File file, int width) инициализирует высоту до -1.

Таким образом, вы должны позвонить:

Java2DRenderer imageRenderer = new Java2DRenderer(doc, 1024, -1); 
Смежные вопросы