Come posso ridurre la dimensione del file di un file PDF scansionato?


372

Ho un file PDF da 72,9 MB che devo ridurre a meno di 500 KB.

Il file era un'immagine JPEG che avevo scansionato e quindi convertito in pdf.


1
dipende da cosa consuma lo spazio ... servono molte più informazioni. comprimere lo spazio dell'immagine potrebbe essere d'aiuto, ma se stai provando uno spray heap di file di grandi dimensioni, non funzionerà. seriamente bisogno di maggiori informazioni.
RobotHumans,

1
convertilo in DjVu, invece cerca di ridurre a PDF di dimensioni impossibili (secondo la fonte)
zetah

il file era un'immagine jpeg che avevo scansionato e poi convertito in pdf.
tamimym,

Sembra solo aiutare a ridimensionare un po 'il file, ma pdfoptha una sintassi semplice e migliora la velocità di caricamento e di rotazione delle pagine nell'era dell'iPad. :-)
Ari B. Friedman,

1
Da PDF a PS non è efficace nel file PDF scansionato, provo a convertire 56 MB di pdf in file ps ma il file ps viene convertito in 1,3 GB e di nuovo ps2pdf viene convertito in file di 45 MB

Risposte:


145

aking1012 ha ragione. Con ulteriori informazioni su possibili immagini incorporate, collegamenti ipertestuali ecc., Sarebbe molto più semplice rispondere a questa domanda!

Ecco un paio di soluzioni per script e da riga di comando. Usa come meglio credi.


15
Grazie mille per i tuoi suggerimenti, la shell ghostscript ha fatto miracoli e lo ha ridotto a 460 KB :)
tamimym

Questo non è necessariamente vero. Se il contenuto è passato da un'immagine al testo, è più che fattibile. [Ciò presuppone che il testo sia accuratamente perfetto]
monaco

2
Ti consiglio di scrivere lo script shrinkpdf.sh, puoi personalizzare il codice per utilizzare il valore ppi desiderato (72 per impostazione predefinita) e raggiungere esattamente le dimensioni del file necessarie per sacrificare la minima qualità. Ciò mi ha permesso di caricare un documento scansionato di 11 MB con un max. dimensione di 3 MB senza perdere molta qualità.
Severo Raz,

4
shrinkpdf funziona alla grande!
Amanic,

2
Dov'è la shell ghostscript a cui l'OP fa riferimento askubuntu.com/questions/113544/… ?
user13107

521

Utilizzare il seguente comando ghostscript :

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • -dPDFSETTINGS=/screenqualità inferiore, dimensioni ridotte. ( 72 dpi )
  • -dPDFSETTINGS=/ebookper una migliore qualità, ma pdf leggermente più grandi. ( 150 dpi )
  • -dPDFSETTINGS=/prepressuscita simile all'impostazione "Prepress Optimized" di Acrobat Distiller ( 300 dpi )
  • -dPDFSETTINGS=/printerseleziona un output simile all'impostazione "Print Optimized" di Acrobat Distiller ( 300 dpi )
  • -dPDFSETTINGS=/default seleziona l'output destinato a essere utile in un'ampia varietà di usi, eventualmente a spese di un file di output più grande

5
Questa dovrebbe essere la risposta accettata. ghostscript è l' implementazione PDF, XPS e PS per gli unici e può praticamente fare tutto ciò che offre la migliore qualità ...
dom0

7
@Sina: In realtà esiste uno script Nautilus con una semplice GUI basata su Zenity che utilizza questo comando gs con tutte le sue opzioni di livello di qualità: launchpad.net/compress-pdf
Sadi,

36
Questa è la risposta giusta per questa domanda (comprimere un pdf che è principalmente dati bitmap). Ho scoperto che l' screenimpostazione era di qualità troppo bassa per me, ma ha ebookfunzionato bene, tagliando un PDF basato su scansione da 33 Mb a 3,6 Mb e mantenendolo molto leggibile. Altre opzioni per l' -dPDFSETTINGSopzione sono elencate qui: milan.kupcevic.net/ghostscript-ps-pdf , e potrebbe essere una buona idea includerle in questa risposta.
naught101

5
parametri di configurazione disponibili per gs: ghostscript.com/doc/current/Ps2pdf.htm
Antonios Hadjigeorgalis,

3
il 17.10 ha fatto 42 mb pdf a 127 mb :(
YaSh Chaudhary,

157

Il mio modo preferito per farlo è convertire il pdf in ps e viceversa. Tuttavia, non sempre funziona, ma quando funziona i risultati sono buoni:

ps2pdf input.pdf output.pdf

Questo funziona anche direttamente su pdf, come suggerito nei commenti.

Alcuni utenti segnalano anche maggiore successo quando utilizzano le impostazioni ebook come segue:

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 

4
Questo è un modo molto semplice ed efficace per farlo. Sono stato sorpreso di vedere quanto questo metodo ha compresso i file. Grazie!
Gabriel

16
Nonostante il fatto che questo unico approccio sia diventato la mia soluzione preferita per comprimere i file pdf, interrompe i collegamenti URL che il documento potrebbe avere (cosa che non accade con l'approccio di @Michael D). A parte questo, la bellezza è tutto ciò che posso pensare di gestire questo frammento! (:
Rubens,

1
@Rubens Ah. Non sapevo del fatto che interrompe i collegamenti URL. Grazie per averlo aggiunto.
don.joey,

3
Questo aggira la protezione con password ... dico semplicemente
jojo

8
ps2pdf prenderà i PDF come ingressi, in modo da poter fare questo in un solo passo:ps2pdf intput.pdf output.pdf
Frabjous

127

Se hai un pdf con immagini scansionate , puoi usarlo convertper creare un pdf con compressione jpeg (puoi usare questo metodo su qualsiasi pdf, ma perderai tutte le informazioni di testo).

Per esempio:

convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf

Regola la densità (ad es. 100x100) e la qualità in base alle tue esigenze.

A seconda dell'input, la compressione jpeg potrebbe non essere la scelta migliore a causa di artefatti da compressione. Puoi scegliere tra BZip, Fax, Gruppo4, JPEG, JPEG2000, Lossless, LZW, RLE o Zip come metodi di compressione alternativi (alcuni consentono solo immagini in bianco e nero). Per dettagli vedi qui .

Sono stato in grado di ottenere ottimi rapporti di compressione per i documenti scansionati / fotografati (a seconda delle impostazioni). A seconda dell'origine del documento, è possibile che si desideri ridurre l'intensità del colore ( -depthargomento).


3
Per un documento scansionato in cui il testo è quello che ti interessa piuttosto che le immagini e preservare la profondità non è un problema, la compressione jpeg non è una buona idea perché i manufatti tendono ad essere estremamente evidenti. Se si utilizza pdfimages input.pdf pagesper estrarre i file PBM, allora si può fare qualcosa di simile: for page in *.pbm; do convert $page -compress Group4 -type bilevel TIFF:- | convert - output.pdf. Qualsiasi OCR andrà perso, quindi di solito lo faccio pdfsandwich output.pdf, il che sembra ridurre ulteriormente le dimensioni del file.
Brian Z,

1
@BrianZ sicuramente la compressione jpeg non è sempre la scelta migliore, ma per me è stato l'approccio migliore per i documenti di tipo misto. Ho aggiunto alcune informazioni su altri metodi di compressione alla risposta.
someonr

2
Questo metodo alla fine utilizza gsdietro le quinte.
alfC

2
Ho dovuto usare doppio trattino per le opzioni per eseguire il comando --density --quality --compressvs -density -quality -compress.
Rotareti,

1
Se la qaulità delle immagini non è la preoccupazione maggiore (e vuoi solo che quell'allegato e-mail sia sufficientemente piccolo da poter essere inviato), potresti aggiungerne uno -resize 50%, cambia la percentuale a seconda di quanto DPI è stato usato durante la scansione
chrki

41

Avevo bisogno di ridimensionare un PDF che conteneva scansioni a colori di un documento. Ciascuna delle mie pagine era un'immagine a colori per quanto riguardava il file. Erano immagini di pagine contenenti testo e immagini, ma sono state create scansionando un'immagine.

Ho usato una combinazione del comando ghostscript di seguito e uno da un altro thread.

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE  -dBATCH -sOutputFile=output.pdf input.pdf

Ciò ha ridotto la risoluzione dell'immagine a 150 dpi, dimezzando le dimensioni del mio file. Guardando il documento, non si notava quasi alcuna perdita evidente della qualità dell'immagine. Il testo è ancora perfettamente leggibile sul mio Nexus7 del 2012.


3
+1 per le immagini di campionamento verso il basso ma mantenendo il testo come vettori. Ha fatto un'enorme differenza di lato senza rendere il mio testo pixelato.
Jason O'Neil l'

Fantastico che si possa mettere a punto la risoluzione con questo comando - questo mi ha dato risultati migliori rispetto all'uso di dPDFSETTINGS = \ screen
scambio del

29

Ecco uno script per riscrivere i PDF scansionati:

#!/bin/sh

gs  -q -dNOPAUSE -dBATCH -dSAFER \
    -sDEVICE=pdfwrite \
    -dCompatibilityLevel=1.3 \
    -dPDFSETTINGS=/screen \
    -dEmbedAllFonts=true \
    -dSubsetFonts=true \
    -dColorImageDownsampleType=/Bicubic \
    -dColorImageResolution=72 \
    -dGrayImageDownsampleType=/Bicubic \
    -dGrayImageResolution=72 \
    -dMonoImageDownsampleType=/Bicubic \
    -dMonoImageResolution=72 \
    -sOutputFile=out.pdf \
     $1

Potresti personalizzarlo un po 'per renderlo più riutilizzabile ma se hai solo un pdf, puoi semplicemente sostituirlo $1con il tuo nome file pdf e inserirlo in un terminale.


1
Funziona a meraviglia, grazie Oli. Hai risposto praticamente a tutto ciò che ti ho chiesto finora :-D
Rob Cowell,

Questa è una buona risposta, ma nel mio caso almeno ci vuole molto tempo per convertire un file PDF piuttosto grande (> 10 Mb) (più di un minuto).
Gabriel,

Non sono sicuro di cosa accada, ma un PDF da 30 MB genera un file da 68 MB. Invece di ridurre, si ingrandisce. Stesso output se si utilizza direttamente ps2pdf come indicato nella prossima risposta.
Ed Villegas,

@EdVillegas L'unica cosa che mi viene in mente (per spiegare quel tipo di aumento) è che le immagini hanno una risoluzione inferiore rispetto a quelle che vengono generate (72 dpi). O in qualche modo incorporare i caratteri sta succhiando tutti i caratteri.
Oli

21

Di solito uso ps2pdf per fare questo (sintassi più semplice), qualcosa del genere:

ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF

Uso il seguente script python per ridurre la dimensione di tutti i file pdf in una directory in un server di produzione (8.04). Quindi dovrebbe funzionare.

#!/usr/bin/python

import os

for fich in os.listdir('.'):
        if fich[-3:]=="pdf":
                os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))

Grazie per la soluzione alternativa. Ho provato prima Oli e mi ha dato il risultato di cui avevo bisogno, ma lo terrò anche per riferimento futuro.
Rob Cowell,

1
-dPDFSETTINGS = / L'opzione stampante esegue il ridimensionamento del 50%. ebook ridimensiona al 90%.
neouyghur,

17
  1. Uso LibreOffice Draw per aprire il pdf.
  2. Poi "esporta in pdf"
  3. E imposta "Qualità compressione JPEG" su 50% e "Risoluzione immagine" su 150 dpi

Questo avrà un buon risultato.


Peggior soluzione possibile al problema! Ha completamente incasinato il mio file!

9

Il meglio per me è stato

convert -compress Zip -density 150x150 input.pdf output.pdf

Altri modi:

#### gs
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

### pdf2ps && ps2pdf
pdf2ps input.pdf output.ps && ps2pdf output.ps output.pdf

### Webservice
http://compress.smallpdf.com/de

Saluti


Ottima soluzione Facile da ricordare e ha portato il mio pdf da 32 a 3,5 MB senza perdita di leggibilità.
Immanuel Weihnachten,

Mi è piaciuto il secondo modo pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps
McPeppr

5

Ho appena riscontrato questo problema da solo. Se si utilizza la scansione semplice, selezionare la modalità di testo per le scansioni a bassa risoluzione e non sarà necessario preoccuparsi delle cose della riga di comando. Sto solo dicendo.


1
Questa è l'unica risposta in questo thread che ha risolto il mio problema. Ho minimizzato Simplescan, ma è stata davvero la risposta per me, invece di combattere contro Xsane in quella che sembrava essere un'agonia senza fine.
versvs

4

Controlla la qualità della compressione:

#!/bin/sh
INPUT=$1; shift
OUTPUT=$1; shift
GS_BIN=/usr/bin/gs
QFACTOR="0.40"

# Image Compression Quality
#
# Quality HSamples VSamples QFactor
# Minimum [2 1 1 2] [2 1 1 2] 2.40
# Low     [2 1 1 2] [2 1 1 2] 1.30
# Medium  [2 1 1 2] [2 1 1 2] 0.76
# High    [1 1 1 1] [1 1 1 1] 0.40
# Maximum [1 1 1 1] [1 1 1 1] 0.15 

${GS_BIN} -dBATCH -dSAFER -DNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=${OUTPUT} -c "<< /ColorImageDict << /QFactor ${QFACTOR} /Blend 1 /HSample [1 1 1 1] /VSample [1 1 1 1] >> >> setdistillerparams" -f ${INPUT}

... quindi sia INPUT che OUTPUT sono lo stesso argomento? Potresti voler aggiungere delle linee guida per l'uso.
mikewhatever,

2
Nota il shift. Il primo parametro è il file di input, il secondo è il file di output e il resto dei parametri verrà passato così gscom'è.
Mikko Rantalainen,

Penso che si desidera / HSample s e / VSample s , non / HSample e / VSample. Vedi ad esempio documenti ps2pdf o il manuale di riferimento del linguaggio PostScript. Inoltre, forse vale la pena notare che l'intervallo QFactor consentito è compreso tra 0 e 1.000.000 e valori più bassi producono una qualità superiore.
Pont

3

Dato che questo link è stato il primo per me quando ho cercato su Google, ho pensato di aggiungere un'altra possibilità. Nessuna delle soluzioni di cui sopra funzionava per me su un pdf esportato da Inkscape (15 mb), ma alla fine sono riuscito a ridurlo a 1 mb aprendolo in GIMP ed esportandolo di nuovo in pdf.

Un'altra opzione che si avvicinò (ma il testo era un po 'sfocato) era l'utilità di conversione di ImageMagick:

convert -compress Zip input.pdf output.pdf

Immagino che questo sia ciò che intendevi per "un po 'confuso", ma solo per chiarire, convert -compress Zipsembrava rasterizzare tutti i vettori.
Sparhawk,


3

Consiglio vivamente pdfsizeopt .

E 'molto più efficiente in termini di riduzione delle dimensioni rispetto a qualsiasi dei precedenti software CLI e GUI che ho provato (tra cui convert, gs, pdftk, ecc) - anche se forse più lento con pngoutattivato -, e non dispone di alcuni dei loro problemi (senza pesantemente immagini pixelate / degradate, nessuna perdita di segnalibri, ecc.).

Ora, se hai bisogno di raggiungere una certa dimensione indipendentemente dalle conseguenze (incluso il degrado delle immagini fino a un punto di illeggibilità), potrebbe non essere lo strumento di cui hai bisogno, ma come soluzione sempre attiva per ridurre le grandi dimensioni non necessarie nei PDF senza perdere in leggibilità, informazioni e qualità dell'immagine accettabile, penso che sia l'opzione migliore. (Nota: tendo ad usarlo dopo aver fatto prima una vettorializzazione-OCR in Adobe Acrobat [la funzione si chiamava "CleanScan"], che può avere un impatto di dimensioni drammatiche su alcuni documenti di testo scansionati.)


Raccomando l' installazione generica di Unix :

  1. Installa tutte le dipendenze richieste:

  2. Scarica e installa l'eseguibile:

    curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
    cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
    

Uso:

pdfsizeopt original.pdf [compressed.pdf]

Nota per gli utenti mac che trovano questo post (o utenti Linuxbrew): esiste una formula di installazione Homebrew:

brew install --HEAD pts/utils/pdfsizeopt

2

Stavo affrontando lo stesso problema ed ero felice di trovare questa discussione. In particolare, avevo un pdf generato dalle immagini scansionate e avevo bisogno di ridurne le dimensioni in byte di un fattore 6.

Sfortunatamente, nessuna delle soluzioni sopra ha funzionato :(. Poi mi sono reso conto che da qualche parte nel processo scanner-> jpeg-> pdf le dimensioni della pagina erano state gonfiate di un fattore di circa 4. I documenti che ho scansionato erano tutti in formato Letter, ma il pdf aveva dimensioni di

identify -verbose doc_orig.pdf | grep "Print size"
 Print size: 35.4167x48.7222

Ho finalmente ottenuto i risultati desiderati con un comando "converti" che ha fatto sia il ridimensionamento che i passaggi di compressione in uno:

convert -density 135x135 -quality 70 -compress jpeg -resize 22.588% doc_orig.pdf doc_lowres.pdf

Si noti che doc_orig aveva una densità di 72x72 dpi.


1

Se anche la conversione in djvu andasse bene e se non fossero coinvolti colori, potresti provare quanto segue:

Converti il ​​pdf in file jpg usando pdfimages -j

Se invece ottieni file pbm, dovresti fare il passaggio intermedio:

for FILENAME in $(ls *.pbm); do convert $FILENAME ${FILENAME%.*}.jpg ;done

Il comando convert è dal pacchetto imagemagick.

Quindi usa scantailor per ricavarne il tifo .

In un ultimo passaggio, vai agli scantailor fuori directory (dove si trovano i tif) e applica djvubind a quella directory.

Ciò dovrebbe ridurre drasticamente le dimensioni del file senza una grande perdita di qualità del testo. Se si desidera un controllo più preciso sul back-end ocr, è possibile provare a djvubind --no-ocrutilizzare ocrodjvu per aggiungere successivamente il livello ocr.

Se hai dei colori nel tuo documento, le cose diventano un po 'più complicate. Invece di djvubind potresti usare didjvu e in scantailor devi passare alla modalità mista e selezionare a volte immagini a colori manualmente.


1

carica l'immagine o anche il file pdf in inkscape.

Da inkscape: salva in formato vettoriale (come nativo .svg).

Importa file vettoriali in scribus, modifica layout ed esporta / salva come .pdf da lì


0

Strumento di compressione PDF super semplice: pagina GitHub.

Installazione su Ubuntu:

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor

Usa ghostscript.


0

Puoi provare questo:

$ time pdftk myFile.pdf output myFile__SMALLER.pdf compress
GC Warning: Repeated allocation of very large block (appr. size 16764928):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 11837440):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 7254016):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 34041856):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.

real    0m23.677s
user    0m23.142s
sys     0m0.540s
$ du myFile*.pdf
108M    myFile.pdf
74M     myFile__SMALLER.pdf

È più veloce di gsma comprime fino al 30% in questo caso per un file di input 107,5 MiB.


0

Per me l' screenopzione gs era troppo male e ebookquella troppo grande.

Il mio documento originale conteneva testo come immagini a colori e in bianco e nero (a seconda della pagina).

La migliore soluzione che ho trovato è stata:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dColorImageResolution=130 -dGrayImageResolution=130 -dMonoImageResolution=130 -r130 -dNOPAUSE  -dBATCH -sOutputFile=output_lr.pdf input.pdf

Si noti che il livello di compressione non è lineare .. se si specificava 135 non compresso, avrei trovato 130 come (nel mio caso) la massima risoluzione che raggiunge una compressione.


-1

Ho usato i comandi seguenti ma non ha compresso sostanzialmente il mio file pdf. Alcune volte una parte della porzione è stata annerita dopo la compressione.

  1. gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

  2. "ps2pdf -dPDFSETTINGS=/ebook %s %s" % (input_file_path, out_file_path)

Dopo aver vagato troppo sul web non riuscivo a trovare la libreria di compressione giusta. Mi sono imbattuto pdfcompressor.com. Questo è semplicemente un sito fantastico. Comprime il pdf del 95% (15 MB di file). Quindi ho usato selenio e Tor per automatizzare la compressione. Dai un'occhiata al mio repository Github. [GITHUB] ( https://github.com/gugli28/PdfCompressor )

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.