Come sapere se un file PDF è compresso o meno e per (decomprimerlo) comprimerlo


18

Ho appena imparato che i file PDF possono essere compressi per ridurne le dimensioni.

  1. Mi chiedevo come sapere se un file PDF è già stato compresso?
  2. Quali applicazioni / comandi possono essere utilizzati per comprimere o decomprimere un file PDF?

Il mio ambiente è Linux Ubuntu 10.10.


Alcuni tentativi non danno risultati soddisfacenti:

  1. Ecco i risultati del tentativo pdftk:

    $ pdftk 3.pdf output 5.pdf uncompress 
    $ pdftk 3.pdf output 3comp.pdf compress 
    $ ls -l 3.pdf 3comp.pdf 5.pdf
    -rwxrwx--- 1 root plugdev  8652269 2011-07-30 12:27 3comp.pdf
    -rwxrwx--- 1 root plugdev  8652319 2011-07-29 22:15 3.pdf
    -rwxrwx--- 1 root plugdev 16829828 2011-07-30 12:27 5.pdf
    

    Le proprietà dei file mostrano che non tutti sono ottimizzati.

  2. Risultati della conversione in ps e poi di nuovo in pdf:

    $ pdf2ps 3.pdf 3.ps
    $ ps2pdf 3.ps 3c.pdf
    $ ls -l 3.pdf 3.ps 3c.pdf
    -rwxrwx--- 1 root plugdev   8808946 2011-07-30 13:14 3c.pdf
    -rwxrwx--- 1 root plugdev   8652319 2011-07-29 22:15 3.pdf
    -rwxrwx--- 1 root plugdev 122375966 2011-07-30 13:14 3.ps
    

Non posso provarlo adesso, dato che non ho un PDF compresso a portata di mano, ma prova file. Dovrebbe mostrare se il file è compresso o meno.
polemon,

1
@polemon: grazie! Non Il risultato $file 3.pdfè3.pdf: PDF document, version 1.4
StackExchange per All

Si noti che i singoli flussi nel file PDF possono essere compressi. Quindi chiedere "è l'intero file PDF compresso" è la domanda sbagliata (anche se in molti casi tutti o la maggior parte dei flussi saranno compressi o non compressi).
Dirkt

Risposte:


30

in breve:

Per sapere se è già compresso:

strings your.pdf | grep /Filter

Per (annullare) la compressione di un PDF, utilizzare QPDF

qpdf --stream-data=compress your.pdf compressed.pdf
qpdf --stream-data=uncompress compressed.pdf uncompressed.pdf  

spiegazione:

La parola chiave "Filtro" all'interno di un file pdf è un indicatore del metodo di compressione utilizzato. Alcuni di loro sono:

CCITT G3 / G4 - utilizzato per le immagini monocromatiche
JPEG - un algoritmo con perdita di dati che viene utilizzato per le immagini
JPEG2000 - un'alternativa più moderna a JPEG, che viene anche utilizzata per comprimere le immagini
Flate - utilizzata per comprimere sia il testo che le immagini
JBIG2 - un'alternativa a Compressione CCITT per immagini monocromatiche
LZW - utilizzata per la compressione di testo e immagini ma sostituita da Flate
RLE - utilizzata per immagini monocromatiche
ZIP - utilizzata per immagini in scala di grigi o a colori

(copiato da qui ).

Tuttavia, data la complessa struttura del file PDF, la maggior parte delle volte una parte (o "stream") del PDF verrà già compressa in qualche modo (e verrà visualizzata quando si esegue il grepping / filtro) mentre un'altra parte non lo sarà, quindi non esiste una risposta SÌ / NO alla domanda se il PDF è compresso.
un modo per ovviare a questo sarebbe aggiungere l' -copzione a grep, che restituisce il numero di occorrenze, in modo da poter vedere relativamente quanto è compresso. per esempio, se restituisce meno di 10 è piuttosto non compresso.strings "large.pdf" | grep -c /Filter

Un'altra proprietà relativa alle dimensioni nei PDF è se sono stati ottimizzati per un accesso rapido, con PDF "ottimizzati" di dimensioni maggiori, per citare da Wikipedia :

Esistono due layout per i file PDF: non lineare (non "ottimizzato") e lineare ("ottimizzato"). I file PDF non lineari consumano meno spazio su disco rispetto alle loro controparti lineari, sebbene abbiano un accesso più lento poiché parti dei dati necessari per assemblare le pagine del documento sono sparse in tutto il file PDF. I file PDF lineari (detti anche file PDF "ottimizzati" o "ottimizzati per il Web") sono costruiti in modo da consentire la lettura in un plug-in del browser Web senza attendere il download dell'intero file, poiché sono scritti su disco in un moda lineare (come in ordine di pagina). I file PDF possono essere ottimizzati utilizzando il software Adobe Acrobat o QPDF.

Puoi controllare se il PDF è ottimizzato usando pdfinfo your.pdf.


Grazie! (1) I risultati dell'utilizzo di qpdf sono simili all'utilizzo di pdftk: con compress, la dimensione in realtà è diventata un po 'più grande (strano), e con decompressione, la dimensione è diventata molto più grande, quasi raddoppiata. (2) pdftk e gpdf cercano di ottenere lo stesso risultato, usando le opzioni di compressione e decompressione?
StackExchange per All

@Tim: (mi dispiace non ero qui). per (1), come ho spiegato, il PDF è già parzialmente compresso (molto probabilmente), ecco perché la compressione non risparmia troppo (e la decompressione lo rende molto più grande, perché decomprime tutti i flussi compressi). (2) molto probabilmente qpdfe pdftkfanno più o meno la stessa cosa per quanto riguarda la compressione, ma qpdfpossono anche ottimizzare (oltre a molte altre cose).
Philomath,

10

pdftk è uno strumento per eseguire alcune operazioni sui file PDF, come la compressione / decompressione:

$ pdftk test.pdf output compressed_test.pdf compress

Grazie! Mi chiedevo come sapere se un file pdf è già stato compresso?
StackExchange per tutto il

1
@Tim: pdfinfo file.pdfti dice se un PDF è ottimizzato . Tuttavia, non sono sicuro che ciò significhi compresso o meno.
nico,

1
@uloBasEI: ho provato il tuo comando usando pdftk per la compressione, ma la dimensione non è quasi cambiata. Se decomprimo, la dimensione del file raddoppia. Le proprietà del file originale, del file compresso e dei file non compressi mostrano tutti che non sono ottimizzate.
StackExchange per tutti

@nico: grazie! Vedi il mio commento sopra e il mio aggiornamento. Sembra che la compressione e l'ottimizzazione non si implicino a vicenda?
StackExchange per tutti


1

Ho trovato il metodo di compressione nel file pdf. Apri il PDF con l'editor di testo. Esegui una ricerca o Trova -enter CCITT se non trovato, inserisci JPEG, poi Flate, quindi JBIG2, quindi LZW, quindi RLE e quindi ZIP.
Sembra peggio di quello che è! Molto facile trovare il metodo di compressione del flusso di dati.


Questo è piuttosto incerto. Ho usato il tuo metodo per controllare un file PDF non compresso (non compresso da qpdf) usando grep come in grep -E "(CCITT | JPEG | Flate | LZW | RLE | ZIP)" uncompressed.pdf e restituisce questo messaggio File binario uncompressed.pdf partite . Sembra che rilevi il file uncompressed.pdf per contenere entrambi i modelli LZW e RLE.
user91822

-1

Basta controllare le sue proprietà; dirà se il file è compresso o meno.


Penso che la domanda Heidi sia con quale programma controllare le proprietà, in particolare con i programmi basati sulla riga di comando tramite script.
Caleb,

> Basta controllare le sue proprietà - quale programma [open source] si potrebbe usare per fare questo, però ??
Massimo
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.