2010-03-11 4 views
5

mentre io sono in grado di convertire una pagina specifica di un PDF in un PNG in questo modo:Utilizzando Ghostscript in modalità server per convertire file PDF in PNG

gs \ 
    -dSAFER \ 
    -dBATCH \ 
    -dNOPAUSE \ 
    -sDEVICE=png16m \ 
    -dGraphicsAlphaBits=4 \ 
    -sOutputFile=gymnastics-20.png \ 
    -dFirstPage=20 \ 
    -dLastPage=20 \ 
    gymnastics.pdf 

mi chiedo se posso usare in qualche modo la modalità JobServer di Ghostscript elaborare più conversioni senza dover sostenere il costo di avviare ghostscript ogni volta.

da: http://pages.cs.wisc.edu/~ghost/doc/svn/Use.htm

-dJOBSERVER

Definire \004 (^D) per iniziare un nuovo lavoro incapsulato utilizzato per la compatibilità con Adobe PS interpreti che di solito eseguito in un server di lavoro. L'interruttore -dJOBSERVER viene ignorato se i server di lavoro sempre eseguono l'input PostScript con un livello di salvataggio, sebbene l'operatore Exitserver possa essere utilizzato per uscire dal lavoro incapsulato ed eseguire come se fosse stato specificato -dNOOUTERSAVE.

Ciò richiede anche che l'input sia da stdin, altrimenti un errore risulterà (Error: /invalidrestore in --restore--).

Esempio di utilizzo è:

gs ... -dJOBSERVER - < inputfile.ps 
       -or- 
    cat inputfile.ps | gs ... -dJOBSERVER - 

Nota: Il ^D non sfociare in un'azione di fine file stdin come sia su alcune stampanti PostScript che si basano su TBCP (Tagged Binary Protocollo di comunicazione) per causare un ^D fuori banda per segnalare EOF in un flusso dati di input. Ciò significa che le azioni dirette sui file su stdin come flushfile e closefile influenzeranno l'elaborazione dei dati oltre lo ^D nello stream.

l'idea è di eseguire ghostscript in-process. lo script riceverebbe una richiesta per una particolare pagina di un pdf e userebbe ghostscript per generare l'immagine specificata. preferirei non avviare un nuovo processo Ghostscript ogni volta.

+0

Hai provato la soluzione suggerita al tuo problema? –

risposta

2

Allora, perché non può semplicemente utilizzare un comando come questo:

gs \ 
    -sDEVICE=png16m \ 
    -dGraphicsAlphaBits=4 \ 
    -o pngimages_%03d.png \ 
    \ 
    -dFirstPage=20 \ 
    -dLastPage=20 \ 
    gymnastics.pdf 
    \ 
    -dFirstPage=3 \ 
    -dLastPage=3 \ 
    sports.pdf 
    \ 
    -dFirstPage=33 \ 
    -dLastPage=33 \ 
    athletics.pdf 
    \ 
    -dFirstPage=4 \ 
    -dLastPage=4 \ 
    lazyness.pdf 

Questo genererà parecchie immagini PNG di diversi file PDF in un unico movimento.