Foros del Web » Programación para mayores de 30 ;) » Java »

Metadatos en PDF con librería iText

Estas en el tema de Metadatos en PDF con librería iText en el foro de Java en Foros del Web. Buenas a todos! Estoy desarrollando en una aplicación en Swing y tengo generado un PDF como un array de bytes (byte[]). Lo que quiero es ...
  #1 (permalink)  
Antiguo 17/05/2011, 04:45
Avatar de huspy  
Fecha de Ingreso: diciembre-2008
Ubicación: Málaga, España
Mensajes: 120
Antigüedad: 15 años, 10 meses
Puntos: 2
Metadatos en PDF con librería iText

Buenas a todos!

Estoy desarrollando en una aplicación en Swing y tengo generado un PDF como un array de bytes (byte[]).

Lo que quiero es insertar METADATOS al PDF y usando la librería iText he visto que se usa de esta forma:

Código Java:
Ver original
  1. ...
  2. ByteArrayOutputStream baos = generaPDF(...);
  3. byte[] pdf = baos.toByteArray();
  4. PdfReader reader = new PdfReader(pdf);
  5.  
  6. //Aquí está mi problema con new FileOutputStream(C:/)
  7. PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(C:/));
  8.  
  9. HashMap info = reader.getInfo();
  10. info.put("Title", "Hello World stamped");
  11. info.put("Subject", "Hello World with changed metadata");
  12. info.put("Keywords", "iText in Action, PdfStamper");
  13. info.put("Creator", "Silly standalone example");
  14. info.put("Author", "Also Bruno Lowagie");
  15.  
  16. stamper.setMoreInfo(info);
  17. stamper.close();
  18. ...

Esto me funciona perfectamente, pero el problema es que no puedo generar un archivo PDF como tal, en la máquina del usuario y haciendo "new FileOutputStream(C:/)" se genera un archivo.

Por lo tanto he probado con la solución que comento a continuación, pero no me funciona, ¡no me genera los METADATOS!:

Código Java:
Ver original
  1. ...
  2. ByteArrayOutputStream baos = generaPDF(...);
  3. byte[] pdf = baos.toByteArray();
  4. PdfReader reader = new PdfReader(pdf);
  5.  
  6. //Lo que quiero es vez de que me genere en un archivo lo inserte en un OutputStream
  7. PdfStamper stamper = new PdfStamper(reader, baos);
  8.  
  9. //Y después hacer esto
  10. pdf = baos.toByteArray();
  11.  
  12. HashMap info = reader.getInfo();
  13. info.put("Title", "Hello World stamped");
  14. info.put("Subject", "Hello World with changed metadata");
  15. info.put("Keywords", "iText in Action, PdfStamper");
  16. info.put("Creator", "Silly standalone example");
  17. info.put("Author", "Also Bruno Lowagie");
  18.  
  19. stamper.setMoreInfo(info);
  20. stamper.close();
  21. ...

¿¿¿Sabéis porque de esa manera no me guarada los metadatos???

Muchas Gracias por todo y Saludos!!!!
__________________
"Lo escuché y lo olvidé, lo vi y lo entendí, lo hice y lo aprendí." (Confucio)
  #2 (permalink)  
Antiguo 18/05/2011, 14:05
 
Fecha de Ingreso: mayo-2010
Mensajes: 99
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: Metadatos en PDF con librería iText

ey dude, try with this:

PdfWriter.getInstance(document, new FileOutputStream("c:/prueba.pdf"));

I hope this helps.

cheers
  #3 (permalink)  
Antiguo 19/05/2011, 13:25
Avatar de huspy  
Fecha de Ingreso: diciembre-2008
Ubicación: Málaga, España
Mensajes: 120
Antigüedad: 15 años, 10 meses
Puntos: 2
De acuerdo Respuesta: Metadatos en PDF con librería iText

Buenas a todos ya lo he solicionado!!

El problema era que obtenía los datos del ByteArrayOutputStream antes de cerrar el Stamper y no tengo muy claro el por qué pero así debe ser. Pongo el ejemplo de la solución:

Código Java:
Ver original
  1. ...
  2. ByteArrayOutputStream baos = generaPDF(...);
  3. byte[] pdf = baos.toByteArray();
  4. PdfReader reader = new PdfReader(pdf);
  5.  
  6. PdfStamper stamper = new PdfStamper(reader, baos);
  7.  
  8.  
  9.  
  10. HashMap info = reader.getInfo();
  11. info.put("Title", "Hello World stamped");
  12. info.put("Subject", "Hello World with changed metadata");
  13. info.put("Keywords", "iText in Action, PdfStamper");
  14. info.put("Creator", "Silly standalone example");
  15. info.put("Author", "Also Bruno Lowagie");
  16.  
  17. stamper.setMoreInfo(info);
  18. stamper.close();
  19.  
  20. //Esta es la solución, ponerlo después de stamper.close()
  21. pdf = baos.toByteArray();
  22. ...

Bueno Gracias a "todos" y espero que sirva algún día a alguien.

Saludos!
__________________
"Lo escuché y lo olvidé, lo vi y lo entendí, lo hice y lo aprendí." (Confucio)

Etiquetas: itext, metadatos, pdf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:07.