7

У меня есть документ xhtml, который я превращаю в PDF с помощью flyingsaucer. Xhtml имеет несколько тегов, которые имеют встроенные изображения с кодировкой base64. Источник xhtml является динамическим, поэтому структура, в которой теги изображений могут меняться. Это пример того, что тег выглядит следующим образом:Извлечь встроенное изображение в PDF с помощью Flying-Saucer из html

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAagAAAEuCAYAAADbW4YFAAAgAElEQVR4Aex9CYBdRZ ... 

Когда я смотрю на HTML в браузере появляется изображение правильно, однако, элемент IMG не получает вынесено в окончательном формате PDF. Вот как я делаю это для создания PDF.

ITextRenderer renderer = new ITextRenderer(); 
renderer.setDocument(builder.parse(source), ""); 
renderer.layout(); 
renderer.createPDF(response.getOutputStream(),true); 

Может ли кто-нибудь сообщить мне, какой подход я должен предпринять, чтобы выполнить это? Я видел this posting, однако я использую встроенные изображения, поэтому я не вижу, как я могу это сделать, используя решение Эдда.

Заранее спасибо

+0

Существует специальная потребность чтобы заставить данные-url для изображений работать непосредственно в Flying Saucer: https://code.google.com/p/flying-saucer/issues/detail?id=202 – Thilo

ответ

7

Да, вы можете использовать подход, заданный здесь: Render image from servlet in flyingsaucer generated pdf

Где Edd имеет:

 InputStream input = null; 
     try { 
      input = ...; 
      byte[] bytes = IOUtils.toByteArray(input); 
      Image image = Image.getInstance(bytes); 

В случае EDD в изображение поступает из удаленного источника (он пропускает этот бит с input = ...;). В вашем случае вы просто хотите прочитать его из ваших кодированных данных Base64 (текст после base64,. Сначала используйте Base64 decoder для получения двоичных данных в byte[] или Stream, затем вы можете использовать Java ImageIO для создания изображения из ваших байтов и следовать подходу EDD, чтобы получить изображение в PDF престижность Эдд здесь (upvote точно!)

+2

Мне удалось заставить его работать с использованием этого подхода. Благодаря! –

4

Летающие-блюдце поддерживает данные:... протокол изначально Все, что вам нужно сделать, это зарегистрировать обработчик протокола:

-Djava.protocol.handler.pkgs=org.xhtmlrenderer.protocols 

Нет необходимости в сервлетах.

+2

У вас есть ссылка на то, как регистрируются обработчики протоколов? –

+0

Легенда - спасибо! – rodnaph

Смежные вопросы