GNU/Linux >> Linux Esercitazione >  >> Linux

Ottimizza i file PDF (con Ghostscript o altro)

Uso Ghostscript con le seguenti opzioni prese da qui.

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

Potresti trovare che pdftocairo (di Poppler) può creare PDF più piccoli, ma fai attenzione perché eliminerà alcune funzionalità (come i collegamenti ipertestuali).


Puoi ottenere buoni risultati convertendo da PDF a Postscript, quindi di nuovo in PDF usando

pdf2ps file.pdf file.ps
ps2pdf -dPDFSETTINGS=/ebook file.ps file-optimized.pdf

Il valore dell'argomento -dPDFSETTINGS definisce la qualità delle immagini nel PDF risultante. Le opzioni sono, da bassa ad alta qualità:/screen , /default , /ebook , /printer , /prepress , vedere http://milan.kupcevic.net/ghostscript-ps-pdf/ per un riferimento.

Il file Postscript può diventare piuttosto grande, ma ne vale la pena. Sono passato da un PDF da 60 MB a un file Postscript da 140 MB, ma alla fine ho ottenuto un PDF ottimizzato da 1,1 MB.


Se stai cercando un software gratuito (come in 'libre'), Ghostscript è sicuramente la scelta migliore. Tuttavia, non è sempre facile da usare:alcune delle sue (molto potenti) opzioni di elaborazione non sono facili da trovare documentate.

Dai un'occhiata a questa risposta, che spiega come eseguire un controllo più dettagliato sul downsampling della risoluzione dell'immagine rispetto a quello generico -dPDFSETTINGS=/screen does (che definisce alcune impostazioni predefinite complessive, che potresti voler sovrascrivere):

  • Come eseguire il downsampling delle immagini all'interno di un file pdf?

Fondamentalmente, ti dice come eseguire il downsampling di Ghostscript per tutte le immagini a una risoluzione di 72 dpi (questo valore è ciò che -dPDFSETTINGS=/screen usa -- potresti voler andare ancora più in basso):

-dDownsampleColorImages=true \
-dDownsampleGrayImages=true \
-dDownsampleMonoImages=true \
-dColorImageResolution=72 \
-dGrayImageResolution=72 \
-dMonoImageResolution=72 \

Se vuoi provare se Ghostscript è anche in grado di "disincorporare" i caratteri utilizzati (a volte funziona, a volte no, a seconda della complessità del carattere incorporato e anche del tipo di carattere utilizzato ), puoi provare ad aggiungere quanto segue al tuo comando gs:

gs \
  -o output.pdf \
   [...other options...] \
  -dEmbedAllFonts=false \
  -dSubsetFonts=true \
  -dConvertCMYKImagesToRGB=true \
  -dCompressFonts=true \
  -c ".setpdfwrite <</AlwaysEmbed [ ]>> setdistillerparams" \
  -c ".setpdfwrite <</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 /Arial]>> setdistillerparams" \
  -f input.pdf

Nota: Tieni presente che il downsampling della risoluzione dell'immagine ridurrà sicuramente la qualità (in modo irreversibile) e il dis-incorporamento dei caratteri renderà difficile o impossibile la visualizzazione e la stampa dei PDF a meno che gli stessi caratteri non siano installati sulla macchina....

Aggiorna

Un'opzione che avevo trascurato nella mia risposta originale è aggiungere

-dDetectDuplicateImages=true

alla riga di comando. Questo parametro fa sì che Ghostscript provi a rilevare più volte qualsiasi immagine incorporata nel PDF. Ciò può accadere se si utilizza un'immagine come logo o sfondo della pagina e se il software di generazione del PDF non è ottimizzato per questa situazione. Questo era il caso delle versioni precedenti di OpenOffice/LibreOffice (ho testato l'ultima versione di LibreOffice, v4.3.5.2, e non fa più cose così stupide).

Succede anche se concateni i file PDF con l'aiuto di pdftk . Per mostrarti l'effetto e come puoi scoprirlo, diamo un'occhiata a un file PDF di esempio:

pdfinfo p1.pdf

 Producer:       libtiff / tiff2pdf - 20120922
 CreationDate:   Tue Jan  6 19:36:34 2015
 ModDate:        Tue Jan  6 19:36:34 2015
 Tagged:         no
 UserProperties: no
 Suspects:       no
 Form:           none
 JavaScript:     no
 Pages:          1
 Encrypted:      no
 Page size:      595 x 842 pts (A4)
 Page rot:       0
 File size:      20983 bytes
 Optimized:      no
 PDF version:    1.1

Versioni recenti di pdfimages di Poppler utility ha aggiunto il supporto per un -list parametro, che può elencare tutte le immagini incluse in un file PDF:

pdfimages -list p1.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image    423   600   rgb    3   8 jpeg     no     7  0    52    52 19.2K 2.6%

Questo PDF di esempio è un documento di 1 pagina, contenente un'immagine, compressa con compressione JPEG, ha una larghezza di 423 pixel e un'altezza di 600 pixel e viene visualizzata a una risoluzione di 52 PPI sulla pagina.

Se concatenamo 3 copie di questo file con l'aiuto di pdftk così:

pdftk p1.pdf p1.pdf p1.pdf cat output p3.pdf

quindi il risultato mostra queste proprietà dell'immagine tramite pdfimages -list :

pdfimages -list p3.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no     4  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no     8  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    12  0    52    52 19.2K 2.6%

Questo mostra che ci sono 3 oggetti PDF identici (con gli ID 4, 8 e 12) che sono incorporati in p3.pdf adesso. p3.pdf è composto da 3 pagine:

pdfinfo p3.pdf | grep Pages:

 Pages:          3

Ottimizza il PDF sostituendo le immagini duplicate con riferimenti

Ora possiamo applicare l'ottimizzazione sopra menzionata con l'aiuto di Ghostscript

 gs -o p3-optim.pdf -sDEVICE=pdfwrite -dDetectDuplicateImages=true p3.pdf

Controllo:

 pdfimages -list p3-optim.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%

C'è ancora un'immagine elencata per pagina, ma ora l'ID oggetto PDF è sempre lo stesso:10.

 ls -ltrh p1.pdf p3.pdf p3-optim.pdf

   [email protected] 1 kp  staff    20K Jan  6 19:36 p1.pdf
   -rw-r--r--  1 kp  staff    60K Jan  6 19:37 p3.pdf
   -rw-r--r--  1 kp  staff    16K Jan  6 19:40 p3-optim.pdf

Come puoi vedere, la concatenazione "stupida" fatta con pdftk ha aumentato la dimensione del file originale fino a tre volte quella originale. L'ottimizzazione di Ghostscript lo ha ridotto di molto.

Le versioni più recenti di Ghostscript possono persino applicare il -dDetectDuplicateImages per impostazione predefinita. (AFAIR, v9.02, che lo ha introdotto per la prima volta, non lo utilizzava per impostazione predefinita.)


Linux
  1. Come Grep nei file Pdf?

  2. File di gatto con directory?

  3. Rinominare i file nella directory?

  4. Comprimi file PDF su Linux con Densify

  5. Ottimizza ricorsivamente i file PNG

Trova i file persi con Scalpel

Guida introduttiva al comando Tar

Come caricare file con FileZilla

Carica file con Monsta FTP

lsof Command in Linux con esempi

Comando di comunicazione Linux con esempi