Se vuoi solo concatenare due file PDF senza rielaborare il suo contenuto, pdftk
è per te. (Su Mac OS X questo dovrebbe essere disponibile tramite MacPorts o Fink, per Linux, ci sono pacchetti nativi per tutte le principali distribuzioni; per Windows, guarda qui. ) Prova questo:
pdftk title.pdf content.pdf cat output book.pdf
Questo anteporrerà title.pdf a content.pdf e scriverà il risultato in book.pdf .
pdftk
è un modo "stupido", ma molto veloce per concatenare due (o più) file PDF. "Scemo" finora, in quanto pdftk
non interpreta in alcun modo il flusso di dati PDF, si assicura solo che i numeri degli oggetti interni vengano rimescolati secondo necessità e compaiano nella xref
struttura PDF (che in pratica è una sorta di PDF ToC per oggetti).
Ghostscript:
Se si desidera utilizzare Ghostscript, il comando di base per concatenare gli stessi due file sarebbe:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
title.pdf \
content.pdf
Tuttavia, come hai sperimentato, questa semplice riga di comando potrebbe incasinare la qualità dell'immagine. Il motivo è che Ghostscript non viene "scaricato" quando elabora i PDF: li interpreta completamente durante la lettura e crea un file completamente nuovo quando scrive il risultato. Per creare il risultato, utilizzerà automaticamente le impostazioni predefinite per molti dettagli nell'elaborazione complessiva. Queste impostazioni predefinite si applicheranno a tutti i casi in cui le sue invocazioni non avevano altrimenti indicato Ghostscript.
Quindi il metodo di Ghostscript per creare il nuovo book.pdf è molto più "intelligente" (ma anche molto più lento) del pdftk
metodo. (Questo è anche il motivo per cui Ghostscript in molti casi è in grado - entro i limiti - di "riparare" file PDF b0rken o di incorporare caratteri nei PDF di output che non sono incorporati nei PDF di input o di rimuovere immagini duplicate, sostituendo mediante semplici riferimenti, ecc. - e nel complesso creato file più piccoli e meglio ottimizzati da PDF di input gonfiati ...)
La soluzione è non permettere a Ghostscript di usare i suoi valori predefiniti: aggiungendo più parametri personalizzati alla riga di comando.
Che cosa significa "Ghostscript" interpreta "il suo input PDF" ?
Tutto il file e il suo contenuto (oggetti, flussi, caratteri, immagini, ...) vengono letti, controllati e conservati nella propria rappresentazione interna, prima di sputare nuovamente il PDF risultante con i suoi oggetti PDF. Tuttavia, quando "sputa", Ghostscript applicherà tutte le sue impostazioni predefinite interne per le centinaia di parametri [*] che sono disponibili.
Sfortunatamente, ciò provoca il "rielaborazione" delle immagini in base a queste impostazioni predefinite, che possono essere evitate o ignorate solo aggiungendo i propri parametri (desiderati) della riga di comando.
I tuoi problemi di immagine potrebbero essere causati dalla necessità di Ghostscript (a causa di problemi di licenza) di ricodificare le immagini JPEG2000 in codifica JPEG. Se si desidera evitare ciò, aggiungere quanto segue alla riga di comando:
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
Altre opzioni da riga di comando relative all'immagine da considerare per l'inclusione sono:
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
Quindi la riga di comando completa di Ghostscript che potrebbe renderti felice dovrebbe leggere:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
title.pdf \
content.pdf
Puoi anche dire a Ghostscript di non comprimere affatto le immagini nel PDF di output, usando questa riga di comando:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dEncodeColorImages=false \
-dEncodeGrayImages=false \
-dEncodeMonoImages=false \
title.pdf \
content.pdf
.
[*]:
Se sei interessato a conoscere un elenco completo delle impostazioni predefinite utilizzate dal dispositivo pdfwrite di Ghostscript , esegui il comando seguente. Ti restituisce l' elenco completo :
gs \
-sDEVICE=pdfwrite \
-o /dev/null \
-c "currentpagedevice { exch ==only ( ) print == } forall"
Per spiegazioni sul significato esatto di tutti questi parametri, è necessario leggere nella documentazione Adobe sui "Parametri del distillatore" . Ghostscript fa di tutto per imitare tutti questi ...