2011-12-15 96 views
28

Escribo una aplicación java que crea un pdf desde cero utilizando la biblioteca pdfbox.
Necesito colocar una imagen jpg en una de las páginas.No se puede agregar una imagen a un PDF usando PDFBox

Estoy usando este código:

PDDocument document = new PDDocument(); 
PDPage page = new PDPage(PDPage.PAGE_SIZE_A4); 
document.addPage(page); 
PDPageContentStream contentStream = new PDPageContentStream(document, page); 

/* ... */ 
/* code to add some text to the page */ 
/* ... */ 

InputStream in = new FileInputStream(new File("c:/myimg.jpg")); 
PDJpeg img = new PDJpeg(document, in); 
contentStream.drawImage(img, 100, 700); 
contentStream.close(); 
document.save("c:/mydoc.pdf"); 

Cuando ejecuto el código, se termina con éxito, pero si abro el archivo PDF generado usando Acrobat Reader, la página es completamente blanco y la imagen no es colocado en él.
En su lugar, el texto se coloca correctamente en la página.

¿Alguna pista sobre cómo poner mi imagen en el pdf?

Respuesta

52

Definitivamente agregue la página al documento. Querrá hacer eso, pero también he notado que PDFBox no escribirá la imagen si usted crea el PDPageContentStream ANTES del PDJpeg. No se explica por qué esto es así, pero si observas de cerca el origen de ImageToPDF, eso es lo que hacen. Crea el PDPageContentStream después de PDJpeg y mágicamente funciona.

... 
PDJpeg img = new PDJpeg(document, in); 
PDPageContentStream stream = new PDPageContentStream(doc, page); 
... 
+4

Moviendo la creación de PDJpeg antes de que PDPageContentStream resolviera mi problema, muchas gracias. –

+1

Dah, he estado batallando con este también y esto lo resolvió, gracias. Parece un error en mi libro ... ¡debería al menos dar una advertencia! – berry120

+0

¡Me salvaste! Tnx. Trabajé una hora para descubrir por qué mi imagen no se muestra desde un ByteArrayInputStream ... fue el orden de PDJpeg y PDPageContentStream ... –

6

Parece que solo echa en falta una llamada document.addPage(page).

Consulte también la clase de ejemplo ImageToPDF en PDFBox para obtener un código de ejemplo.

+0

Se añade la página para el documento en el código actual, que se olvidó de pegar esa línea de código, estoy corrigiendo el post original. –

Cuestiones relacionadas