7

Tengo un documento xhtml que estoy convirtiendo en un PDF usando flyingsaucer. El xhtml tiene varias etiquetas que tienen una base64 de imágenes codificadas en línea. La fuente de xhtml es dinámica, por lo que la estructura de las etiquetas de las imágenes puede variar. Esta es una muestra de lo que la etiqueta se ve así:Renderizar imagen incrustada en PDF usando Flying-Saucer desde html

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

Cuando miro el HTML en un navegador, aparece la imagen correctamente, sin embargo, el elemento img no consigue representa en el PDF final. Así es como lo estoy elaborando para crear el PDF.

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

¿Alguien me puede decir qué enfoque debo tomar para lograr esto? Vi this posting, sin embargo, estoy usando imágenes en línea, así que no puedo ver cómo puedo lograr esto usando la solución de Edd.

Gracias de antemano

+0

Hay una función requ Es necesario hacer que la URL de datos para las imágenes funcione directamente en Flying Saucer: https://code.google.com/p/flying-saucer/issues/detail?id=202 – Thilo

Respuesta

7

Sí, se puede utilizar el enfoque dado aquí: Render image from servlet in flyingsaucer generated pdf

Cuando Edd tiene:

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

En el caso de Edd la imagen proviene de una fuente remota (él omite ese bit con input = ...;). En su caso, solo quiere leerlo desde sus datos codificados en Base64 (el texto después del base64,. Primero use un Base64 decoder para obtener los datos binarios, en un byte[] o Stream, luego puede usar Java ImageIO para crear la imagen de sus bytes y seguir el enfoque de Edd para obtener la imagen en el PDF Felicitaciones a Edd aquí (upvote seguro!)

+2

Pude hacerlo funcionar con este enfoque. ¡Gracias! –

4

de platillo volante es compatible con los datos:... protocolo de forma nativa Todo lo que tiene que hacer es registrar un controlador de protocolo:

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

No necesita servlets whatsoverver

+2

¿Tiene un vínculo sobre cómo se registran los manejadores de protocolo? –

+0

Leyenda, ¡gracias! – rodnaph

Cuestiones relacionadas