2010-04-16 16 views
6

Quindi ho costruito un sistema di report utilizzando Java e iText. I modelli PDF vengono creati utilizzando Scribus. Il codice Java unisce i dati nel documento usando iText. I file vengono quindi copiati su una condivisione NFS e uno script BASH li stampa.Linux PDF/Postscript Optimizing

Uso acroread per convertirli in PS, quindi lpr il PS.

I file di applicazione FOSS sono orribilmente inefficienti.

Il mio problema principale è che i PDF generati usando iText/Scribus sono molto grandi. E recentemente mi sono imbattuto nel problema in cui si risveglia l'acroread perché colpisce 4 GB di utilizzo di mem su documenti di grandi dimensioni (oltre 300 pagine). (Adobe è dolorosamente lento nell'aggiornare roba a 64 bit).

Ora è possibile utilizzare Adobe Reader su Windows e utilizzare l'opzione Riduci dimensioni file o qualunque sia la sua chiamata, e notevolmente (> 10x) riduce le dimensioni del PDF (rimuove un sacco di metadati sui campi modulo e così via appare) e produce un PDF che è fondamentalmente un'immagine di stampa.

La mia domanda è qualcuno sa di una buona soluzione/programma per fare qualcosa di simile su Linux. Idealmente, ottimizzerebbe il PDF, ridurrebbe le dimensioni e ridurrebbe la complessità della PS in modo che la stampante potesse stampare più velocemente, poiché in questo momento sono necessari circa 15-20 secondi per stampare una pagina.

+0

Scribus dovrebbe creare un buon PDF, anche iText è ben rispettato. pdftops, OTOH, fondamentalmente emette una lista vettoriale in PostScript, quasi il peggior modo possibile. perché hai bisogno di post scriptum? PDF è molto più facile da gestire – Javier

+0

In realtà non sto usando pdftops, sto usando acroread. e sto usando PS per stampare su una stampante che non supporta direttamente la stampa in pdf. –

+0

è possibile utilizzare CUPS per stampare PDF mentre si prendono cura dei problemi specifici della stampante. – Javier

risposta

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

Ghostscript sembra funzionare per la maggior parte per questo problema. Ora sto avendo un problema diverso con ghostscript che elabora i caratteri incorporati, ma aprirò una nuova domanda per questo.

+2

Quale versione di Ghostscript stai usando? Sei consapevole che '/ screen' ri-campiona le tue immagini ad una risoluzione piuttosto bassa (72 dpi), come potrebbe essere appropriato per il rendering sullo schermo, ma che potrebbe darti problemi di qualità di stampa sulle stampanti? –

4

Per ridurre le dimensioni di un file PDF, utilizzare pdfsizeopt, il software che sto sviluppando. pdfsizeopt funziona su Linux, Mac OS X, Windows (e probabilmente anche su altri sistemi).

pdfsizeopt ha un sacco di dipendenze, quindi potrebbe essere un po 'ingombrante da installare (circa 10 minuti del tuo tempo). Sto lavorando per semplificare l'installazione.

Se hai bisogno di qualcosa in fretta, puoi provare una delle sue dipendenze: Multivalent tool.pdf.Compress, che è un puro strumento Java.

Get Multivalent20060102.jar, installare Java ed eseguire

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

Non ci sono limitazioni su ciò che può fare gs -sDEVICE=pdfwrite:

  • non può generare flussi di xrif (in modo che il PDF sarà più grande del necessario)
  • non è in grado di generare flussi di oggetti (quindi il PDF sarà più grande del necessario)
  • non deduplica le immagini o i suoi oggetti (ad es., Se la stessa immagine appare più volte nell'input PDF, gs esegue una copia in uscita per ogni occorrenza)
  • emette immagini subottimale
  • esso ri-campioni immagini a bassa risoluzione
  • talvolta omette di collegamenti in PDF
  • non può convertire alcuni costrutti (per cui l'output PDF può essere visivamente diversa dall'ingresso)

pdfsizeopt né multivalente di tool.pdf.Compress soffrire di queste limitazioni.