2010-04-16 14 views
6

Así que tengo un sistema de informes creado con Java e iText. Las plantillas en PDF se crean con Scribus. El código de Java combina los datos en el documento utilizando iText. Luego, los archivos se copian a un recurso compartido NFS, y un script BASH los imprime.Linux PDF/Optimización de Postscript

Uso acroread para convertirlos a PS, luego lpr el PS.

La aplicación FOSS pdftops es terriblemente ineficiente.

Mi problema principal es que los PDF generados con iText/Scribus son muy grandes. Y recientemente me encontré con el problema donde se producen dolores de úlceras porque golpea 4 gb de uso de memoria en documentos grandes (más de 300 páginas). (Adobe es muy lento para actualizar cosas a 64 bits).

ahora puedo usar el lector de Adobe en Windows, y utilizar la opción de tamaño de archivo Reducir o cualquiera que sea su llamado, y en gran medida (> 10 veces) reduce el tamaño del PDF (que elimina una gran cantidad de metadatos sobre los campos del formulario y tal, aparece) y produce un PDF que es básicamente una imagen impresa.

Mi pregunta es si alguien sabe de una buena solución/programa para hacer algo similar en Linux. Idealmente, optimizaría el PDF, reduciría el tamaño y reduciría la complejidad de la PS para que la impresora pueda imprimir más rápido, ya que demora unos 15-20 segundos en imprimirse en este momento.

+0

Se supone que Scribus crea buenos PDF, iText también es muy respetado. pdftops, OTOH, básicamente emite una lista vectorial en PostScript, casi de la peor manera posible. ¿Por qué necesitas postcript? PDF es mucho más fácil de manejar – Javier

+0

En realidad, no estoy usando PDFtops, estoy usando Acroread. y estoy usando PS para imprimir en una impresora que no admite la impresión de PDF directamente. –

+0

puede usar CUPS para imprimir PDF mientras se ocupa de problemas específicos de la impresora. – Javier

Respuesta

4
gs \ 
    -dCompatibilityLevel=1.4 \ 
    -dPDFSETTINGS=/screen \ 
    -dNOPAUSE \ 
    -dBATCH \ 
    -sDEVICE=pdfwrite \ 
    -sOutputFile=output.pdf \ 
    input.pdf 

Ghostscript parece funcionar para la mayoría de este problema. Ahora tengo un problema diferente con ghostscript, que engloba las fuentes incrustadas, pero abriré una nueva pregunta para eso.

+2

¿Qué versión de Ghostscript estás usando? ¿Sabe usted que '/ screen' vuelve a muestrear sus imágenes a una resolución bastante baja (72 ppp), como puede ser apropiado para renderizar en la pantalla, pero que puede ocasionar problemas de calidad de impresión en las impresoras? –

4

Para reducir el tamaño de un archivo PDF, use pdfsizeopt, el software que estoy desarrollando. pdfsizeopt se ejecuta en Linux, Mac OS X, Windows (y posiblemente en otros sistemas también).

pdfsizeopt tiene muchas dependencias, por lo que puede ser un poco engorroso instalarlo (unos 10 minutos de su tiempo). Estoy trabajando para facilitar la instalación.

Si necesita algo rápidamente, puede probar una de sus dependencias: Multivalente tool.pdf.Compress, que es una herramienta pura de Java.

Obtener Multivalent20060102.jar, instalar Java y ejecutar

java -cp Multivalent20060102.jar tool.pdf.Compress input.pdf 

hay limitaciones en lo que puede hacer gs -sDEVICE=pdfwrite:

  • no puede generar flujos de referencia externa (por lo que el PDF será más grande de lo necesario)
  • no puede generar secuencias de objetos (por lo que el PDF será más grande de lo necesario)
  • no deduplica las imágenes o ot sus objetos (es decir, Si la misma imagen aparece varias veces en el PDF de entrada, gs hace una copia en la salida para cada ocurrencia)
  • que emite imágenes subóptima
  • se re-muestras imágenes a baja resolución
  • a veces omite hipervínculos en la PDF
  • que no puede convertir algunas construcciones (por lo que la salida de PDF puede ser visualmente diferente de la de entrada)

ni pdfsizeopt ni multivalente de tool.pdf.Compress sufrir de estas limitaciones.

Cuestiones relacionadas