Alcune delle ottimizzazioni dimensione che si osservate possono provenire da pulizia di Ghostscript da oggetti inutilizzati, la sua recente acquisizione miglioramenti di ottimizzazione dei font (si usa una recentissima versione di GS?!?) e possibilmente il re-down/campionamento dell'immagine che potrebbe essersi verificato.
Ghostscript, se utilizzato per PDF -> PDF conversioni, funziona sostanzialmente in questo modo:
- Read nel file di input (s) con tutti i suoi oggetti e li converte in formato interno per la pagina di grafica rappresentazioni.
- Effettuare le manipolazioni richieste nella riga di comando ai contenuti della pagina nel formato interno.
- Scrivi un PDF completamente nuovo.
Questo significa che per la maggior parte PDF -> PDF operazioni dovrete ordinamento diverso e numerazione per gli oggetti in formato PDF, e anche codice interno dell'oggetto potrebbe essere cambiato (anche se gli occhi non scoprire alcuna differenze tra PDF di input e output).
Per impostazione predefinita Ghostscript comprimerà anche tutti i flussi di oggetti che non sono stati compressi nel file originale (ma questa è una compressione senza perdita di dati).
Ora per la riga di comando molto semplicistico che non contiene alcun auguri per manipolazioni, Ghostscript assume si desidera utilizzare -dPDFSETTINGS=/default
, imposta questo parametro in modo implicito e opera di conseguenza.
Ora cosa sono le /default
PDFSETTINGS ?!Hai due opzioni per scoprirlo:
leggere il manuale di. Il grande table in middle of this section offre una panoramica. Potete vedere che questo -dPDFSETTINGS=/default
di per sé è solo una scorciatoia per le diverse decine di altre impostazioni più specifiche che rappresenta. Il collegamento alla documentazione fornita è per l'attuale HEAD del codice di sviluppo e la versione effettivamente utilizzata potrebbe essere diversa, naturalmente.
Query (proprio) Ghostscript per il significato dettagliato di questa impostazione. Le mie risposte alla domanda 'Querying Ghostscript for the default options/settings of an output device...' e la domanda 'What are PostScript dictionaries, and how can they be accessed (via Ghostscript)?' elaborano un po 'di più su questo. In breve, per interrogare Ghostscript per i dettagli dei suoi /default
PDFSETTINGS, eseguire questo comando:
gs \
-q \
-dNODISPLAY \
-c ".distillersettings /default get {exch ==only () print ===} forall quit"
Si dovrebbe ottenere un risultato molto simile a questo:
/Optimize false
/DoThumbnails false
/PreserveEPSInfo true
/ColorConversionStrategy /LeaveColorUnchanged
/DownsampleMonoImages false
/EmbedAllFonts true
/CannotEmbedFontPolicy /Warning
/PreserveOPIComments true
/GrayACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >>
/DownsampleColorImages false
/PreserveOverprintSettings true
/CreateJobTicket false
/AutoRotatePages /PageByPage
/NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats]
/ColorACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >>
/DownsampleGrayImages false
/UCRandBGInfo /Preserve
L'unico punto che si distingue da questi : potresti voler cambiare /AutoRotagePages
da /PageByPage
a /None
. Sulla riga di comando lo si inserirà come -dAutoRotatePages=/None
.
per darvi un elenco completo dei parametri che specificamente dire Ghostscript di impiegare più di un modo passthrough quanto possibile per l'ingresso in formato PDF con l'aggiunta di questi parametri:
-dAntiAliasColorImage=false \
-dAntiAliasGrayImage=false \
-dAntiAliasMonoImage=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dDownsampleColorImages=false \
-dDownsampleGrayImages=false \
-dDownsampleMonoImages=false \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dConvertCMYKImagesToRGB=false \
-dConvertImagesToIndexed=false \
-dUCRandBGInfo=/Preserve \
-dPreserveHalftoneInfo=true \
-dPreserveOPIComments=true \
-dPreserveOverprintSettings=true \
così si potrebbe provare questo comando:
gs \
-o output.pdf \
-sDEVICE=pdfwrite \
-dAntiAliasColorImage=false \
-dAntiAliasGrayImage=false \
-dAntiAliasMonoImage=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dDownsampleColorImages=false \
-dDownsampleGrayImages=false \
-dDownsampleMonoImages=false \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dConvertCMYKImagesToRGB=false \
-dConvertImagesToIndexed=false \
-dUCRandBGInfo=/Preserve \
-dPreserveHalftoneInfo=true \
-dPreserveOPIComments=true \
-dPreserveOverprintSettings=true \
input1.pdf \
input2.pdf
Infine, come Chris Haas al pronto a suggerire: è anche possibile utilizzare pdftk
se si specifica che non desidera alcuna ottimizzazione che Ghostscript si applica per impostazione predefinita. pdftk
è semplicemente incapace di fare queste cose, e guadagnerai un po 'di velocità per la relativa silenziosità di funzionamento (ma probabilmente anche uscite di file di dimensioni molto maggiori rispetto a Ghostscript).
fonte
2012-09-03 22:14:33
Grazie per aver raccomandato pdftk. Per una semplice concatenazione di file PDF sembra perfetto. –
FWIW: 'pdftk' non è disponibile per CentOS/RHEL 7. –
cool .. !! Davvero –