opzione di compressione pdftk


94

Uso pdftk per comprimere un pdf usando la seguente riga di comando

pdftk file1.pdf output file2.pdf compress

Funziona quando il peso del mio file diminuisce.

Ci sono [opzioni] per modificare la compressione ???

O forse altre soluzioni per comprimere il mio file? È pesante perché alcuni elementi grafici hanno molti punti . C'è un modo per convertire questi grafici in jpg, ad esempio, e adattare la compressione?


1
Dalla mia esperienza, dipende da cosa c'è nel tuo pdf. Se si tratta di un grafico con molti punti, ad esempio, la soluzione migliore è convertire il grafico in png e includere questo png nel pdf.
RockScience

Risposte:


122

Ho avuto lo stesso problema e ho trovato due soluzioni diverse (vedi questo thread per maggiori dettagli). Entrambi hanno ridotto drasticamente le dimensioni del mio PDF non compresso.

  • Pixelated (lossy):

    convert input.pdf -compress Zip output.pdf
    
  • Senza pixel (senza perdita di dati, ma potrebbe essere visualizzato in modo leggermente diverso):

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

Modifica : ho appena scoperto un'altra opzione (per la compressione senza perdita di dati), che evita il brutto comando gs. qpdf è uno strumento accurato che converte i PDF (compressione / decompressione, crittografia / decrittografia) ed è molto più veloce del comando gs:

qpdf --linearize input.pdf output.pdf

3
Eccezionale. gs ha funzionato per me, convertendo un file da 4 MB in 339K. C'è stata una perdita di qualità, ma è servito a sufficienza al mio scopo.
Sridhar Sarnobat

27
È possibile utilizzare l'impostazione PDF "stampante" per una migliore qualità:gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
imriss

10
Per regolare la qualità (e quindi le dimensioni), variare il valore PDFSETTINGS. Vedi ghostscript.com/doc/current/Ps2pdf.htm#Options
1in9ui5t

6
Nota che il gscomando nella risposta non è esattamente senza perdita di dati, poiché riduce la risoluzione e la qualità dei JPG incorporati. Ma è senza perdita di dati. testo, mantenendolo come testo, mentre il convertcomando lo converte in grafica raster.
tanius

13
L'impostazione dell'opzione -dPDFSETTINGS=su /ebookfornisce un output molto carino per me: certo, è compresso e alcuni artefatti jpg sono visibili, ma è totalmente leggibile per una dimensione ragionevole. Grazie!
Joël

35

questa procedura funziona abbastanza bene

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

Provaci.


8
Questa non è una soluzione generale. In molti casi, il pdf risultante è più grande.
rotskoff

4
Questo ha funzionato al meglio tra tutte le soluzioni menzionate per me. Alcune immagini di grandi dimensioni sono passate da 23 MB a 1,4 MB con la perdita di qualità di gran lunga inferiore.
AerandiR

1
@rotskoff Probabilmente non esiste una soluzione generale perché esistono diversi tipi di documenti. Tuttavia vedo il tuo punto. Sarebbe bello avere un software che capisca cosa funziona meglio per noi.
tiktak

Grazie, questo ha funzionato per me, mentre qpdf e gs non hanno ridotto le dimensioni del file di output.
sebastian

1
Come accennato qui, un altro svantaggio di questo metodo è che interromperà i collegamenti URL all'interno del documento.
ptomato

30

Cercando di comprimere un PDF ho creato con 400ppi tiff, principalmente 8 bit, alcuni 24 bit, con compressione PackBits, utilizzando tiff2pdfcompressed con Zip / Deflate. Un problema che ho avuto con ognuno di questi metodi: nessuno dei metodi sopra ha conservato il sommario dei segnalibri che ho creato accuratamente manualmente in Acrobat Pro X. Nemmeno l' ebookimpostazione consigliata per gs. Certo, potrei semplicemente aprire una copia dell'originale con il sommario intatto e fare un, Replace pagesma sfortunatamente nessuno di questi metodi ha fatto un lavoro soddisfacente per cominciare. O hanno ridotto le dimensioni così tanto che la qualità è stata pixelata in modo inaccettabile, oppure non hanno ridotto affatto le dimensioni e in un caso l'hanno effettivamente aumentata nonostante la perdita di qualità.

pdftk compress:

no change in size
bookmarks TOC are gone

gs screen:

takes a ridiculously long time and 100% CPU
errors:
    sfopen: gs_parse_file_name failed.                                 ? 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->10.2MB hideously pixellated
bookmarks TOC are gone

gs printer:

takes a ridiculously long time and 100% CPU
no errors
74.8MB-->66.1MB
light blue background on pages 1-4
bookmarks TOC are gone

gs ebook:

errors:
    sfopen: gs_parse_file_name failed.
      ./base/gsicc_manage.c:1050: gsicc_open_search(): Could not find default_rgb.ic 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->32.2MB
badly pixellated
bookmarks TOC are gone

qpdf --linearize:

very fast, a few seconds
no size change
bookmarks TOC are gone

pdf2ps:

took very long time
output_pdf2ps.ps 74.8MB-->331.6MB

ps2pdf:

pretty fast
74.8MB-->79MB
very slightly degraded with sl. bluish background
bookmarks TOC are gone

2
Questa è una ricerca estremamente preziosa (grazie!) Ma è anche così tanto non una risposta che per un momento ho pensato al voto negativo.
ndemou

3
Come non è una risposta?
hmj6jmh

22

Se la dimensione del file è ancora troppo grande, potrebbe essere utile utilizzare ps2pdf per ridimensionare la risoluzione del file pdf prodotto:

pdf2ps input.pdf tmp.ps
ps2pdf -dPDFSETTINGS=/screen -dDownsampleColorImages=true -dColorImageResolution=200 -dColorImageDownsampleType=/Bicubic tmp.ps output.pdf

Regola il valore dell'opzione -dColorImageResolution per ottenere un risultato adatto alle tue esigenze (il valore descrive la risoluzione dell'immagine in DPI). Se il file di input è in scala di grigi, anche la sostituzione di Colore con Grigio o l'utilizzo di entrambe le opzioni nel comando precedente potrebbe aiutare. È possibile un'ulteriore messa a punto modificando l' opzione -dPDFSETTINGS in / default o / printer . Per spiegazioni su tutte le opzioni possibili consultare il manuale di ps2pdf .


1
Grazie per la punta. Con -dPDFSETTINGS potrei ridurre le dimensioni del mio PDF scansionato
eshwar

1
GRAZIE. Non penso che ci sia una soluzione generale per il caso d'uso di tutti, ma ho provato quasi tutte le soluzioni su questo thread e questa è l'unica che ha funzionato per me !!! Essere in grado di "sintonizzare" il parametro dColorImageResolution era fondamentale: era necessario ottenere la dimensione del documento abbastanza piccola da consentire a questo sito governativo di accettarla, ma abbastanza grande da essere leggibile. Grazie, zio Sam, per l'ennesimo doloroso cerchio da superare :)
Michael Klear

3

Dopo aver provato gpdf come suggerito da nullglob , ho scoperto di ottenere gli stessi risultati di compressione (un file da ~ 900mb fino a ~ 30mb) usando semplicemente la stampante cups-pdf. Questo potrebbe essere più semplice / preferito se stai già visualizzando un documento e devi solo comprimere uno o due documenti.

In Ubuntu 12.04, puoi installarlo con

sudo apt-get install cups-pdf

Dopo l'installazione, assicurati di controllare in Strumenti di sistema > Amministrazione > Stampa > fai clic con il pulsante destro del mouse su "PDF" e impostalo su "abilita"

Per impostazione predefinita, l'output viene salvato in una cartella denominata PDF nella directory home.


3

L'opzione pdf2ps di una riga (di Lee) ha effettivamente aumentato la dimensione del pdf. Tuttavia, i due passaggi uno hanno fatto meglio. E può essere combinato in uno unico utilizzando il reindirizzamento da & a input / output standard e pipe:

pdf2ps large.pdf - | ps2pdf - small.pdf

ha ridotto un PDF generato da xsane da 18 Mo a 630 ko!

I collegamenti sono persi, ma per il presente esempio, non è un problema ... ed è stato il modo più semplice per ottenere il risultato desiderato.


Potresti provare ps2pdfinvece, vedere il mio commento alla risposta di @ Lee.
myrdd

2

pdf2ps large.pdf small.pdf è sufficiente, invece di due passaggi

pdf2ps large.pdf very_large.ps 
ps2pdf very_large.ps small.pdf

Tuttavia, ps2pdf large.pdf small.pdfè una scelta migliore.

  • ps2pdf è molto più veloce
  • senza parametri aggiuntivi specificati, a pdf2psvolte produce file più grandi.

Dove hai trovato questa opzione? È una funzionalità di qualche versione recente? Non ha funzionato per me. Anche se ho chiamato il file di output out.pdf, è diventato un file PS ( mimetype out.pdfdice out.pdf: application/postscript).
myrdd

la mia è la versione più recente 9.xx. non sono sicuro che il tuo.
Lee

Sto usando la versione pacchettizzata Debian stable ("stretch"), che è la 9.25. Potresti controllare se hai effettivamente un file pdf digitandolo mimetype small.pdf?
myrdd

l'uscita di mimetype small.pdfè small.pdf: application/pdf. Penso che il programma possa determinare automaticamente il tipo di file in base al suffisso.
Lee

1
@ mirdd yeah, ho fatto dei test. ps2pdfè meglio.
Lee

1

Non ho visto molta riduzione della dimensione del file usando qpdf. Il modo migliore che ho trovato è dopo che pdftk è finito, usa ghostscript per convertire PDF in PostScript e poi di nuovo in PDF. In PHP useresti exec:

$ps = $save_path.'/psfile.ps';
exec('ps2ps2 ' . $pdf . ' ' . $ps);
unlink($pdf);
exec('ps2pdf ' .$ps . ' ' . $pdf);
unlink($ps);

L'ho usato pochi minuti fa per portare l'output di pdftk da 490k a 71k.


PHP aggiunge una complessità completamente inutile e restringe l'applicabilità di questa risposta
ndemou

-2

Ho avuto lo stesso problema e ho usato questa funzione per comprimere singole pagine, il che si traduce in una compressione della dimensione del file fino a 1/3 della dimensione originale.

for (int i = 1; i <= theDoc.PageCount; i++)
{
       theDoc.PageNumber = i;
       theDoc.Flatten();
}

stai usando la libreria C ++ di pdftk?
RockScience

-2

Nel caso in cui desideri comprimere un PDF che contiene molto testo selezionabile, su Windows puoi usare NicePDF Compressor - scegli l'opzione "Flate". Dopo aver provato tutto (cpdf, pdftk, gs) mi ha finalmente aiutato a comprimere il mio PDF di 1360 pagine da 500 MB a 10 MB.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.