Bagaimana mengetahui apakah file PDF dikompresi atau tidak dan untuk (membatalkan) kompres

18

Saya baru tahu bahwa file PDF dapat dikompres untuk mengurangi ukuran disk mereka.

  1. Saya bertanya-tanya bagaimana cara mengetahui apakah file PDF sudah dikompres?
  2. Aplikasi / perintah apa yang dapat digunakan untuk mengompres atau mengompres file PDF?

Lingkungan saya adalah Linux Ubuntu 10.10.


Beberapa upaya tidak memberikan hasil yang memuaskan:

  1. Inilah hasil dari mencoba 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
    

    Properti file menunjukkan bahwa semuanya tidak dioptimalkan.

  2. Hasil konversi ke ps dan kemudian kembali ke 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
    
StackExchange untuk Semua
sumber
Saya tidak dapat mengujinya sekarang, karena saya tidak memiliki PDF terkompresi, tetapi coba file. Itu harus menunjukkan apakah file dikompresi atau tidak.
Polemon
1
@polemon: Terima kasih! Tidak. Hasil $file 3.pdf3.pdf: PDF document, version 1.4
terbaiknya
Perhatikan bahwa setiap aliran dalam file PDF dapat dikompresi. Jadi bertanya "apakah seluruh file PDF dikompresi" adalah pertanyaan yang salah (meskipun dalam banyak kasus semua, atau sebagian besar stream akan dikompresi atau tidak dikompresi).
dirkt

Jawaban:

30

pendeknya:

Untuk mengetahui apakah sudah dikompresi:

strings your.pdf | grep /Filter

Untuk (membatalkan) kompres PDF, gunakan QPDF

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

penjelasan:

Kata kunci "Filter" di dalam file pdf adalah indikator dari metode kompresi yang digunakan. Beberapa dari mereka adalah:

CCITT G3 / G4 - digunakan untuk gambar monokrom
JPEG - algoritma lossy yang digunakan untuk gambar
JPEG2000 - alternatif yang lebih modern untuk JPEG, yang juga digunakan untuk mengompresi gambar
Flate - digunakan untuk mengompresi teks serta gambar
JBIG2 - alternatif untuk Kompresi CCITT untuk gambar monokrom
LZW - digunakan untuk mengompresi teks serta gambar tetapi diganti oleh Flate
RLE - digunakan untuk gambar monokrom
ZIP - digunakan untuk gambar abu-abu atau warna

(disalin dari sini ).

Namun, mengingat struktur file kompleks PDF, sebagian besar waktu sebagian (atau "aliran") dari PDF akan dikompresi dengan beberapa cara (dan akan muncul ketika grepping / Filter) sementara beberapa bagian lainnya tidak akan, jadi tidak ada jawaban YA / TIDAK untuk pertanyaan apakah PDF dikompresi.
salah satu cara untuk mengatasinya adalah dengan menambahkan -copsi ke grep, yang mengembalikan jumlah kemunculan, sehingga Anda dapat melihat secara relatif seberapa baik itu dikompresi. misalnya, jika pengembalian kurang dari 10 itu cukup tanpa kompresi.strings "large.pdf" | grep -c /Filter

Properti lain yang berkaitan dengan ukuran dalam PDF, adalah apakah mereka telah dioptimalkan untuk akses cepat, dengan ukuran PDF "yang dioptimalkan" menjadi lebih besar, mengutip dari wikipedia :

Ada dua tata letak untuk file PDF — non-linear (tidak "dioptimalkan") dan linear ("dioptimalkan"). File PDF non-linier menggunakan ruang disk lebih sedikit daripada rekan-rekan liniernya, meskipun mereka lebih lambat untuk diakses karena bagian dari data yang diperlukan untuk merakit halaman dokumen tersebar di seluruh file PDF. File PDF linier (juga disebut "dioptimalkan" atau "dioptimalkan web" file PDF) dibangun dengan cara yang memungkinkan mereka untuk dibaca dalam plugin browser Web tanpa menunggu seluruh file untuk diunduh, karena mereka ditulis ke disk dalam sebuah mode linear (seperti dalam urutan halaman). File PDF dapat dioptimalkan menggunakan perangkat lunak Adobe Acrobat atau QPDF.

Anda dapat memeriksa apakah PDF dioptimalkan menggunakan pdfinfo your.pdf.

Philomath
sumber
Terima kasih! (1) Hasil menggunakan qpdf mirip dengan menggunakan pdftk: dengan kompres, ukuran sebenarnya menjadi sedikit lebih besar (aneh), dan dengan tidak kompres, ukurannya menjadi jauh lebih besar, hampir dua kali lipat. (2) Apakah pdftk dan gpdf mencoba melakukan hal yang sama, menggunakan opsi kompres dan uncompress?
StackExchange untuk Semua
@Tim: (maaf saya tidak di sini). untuk (1), seperti yang saya jelaskan, PDF sudah dikompresi sebagian (kemungkinan besar), itu sebabnya mengompresi tidak menghemat terlalu banyak, (dan dekompresi membuatnya jauh lebih besar, karena ia mengompres semua aliran terkompresi). (2) kemungkinan besar qpdfdan pdftkmelakukan hal yang kurang lebih sama tentang kompresi, tetapi qpdfdapat mengoptimalkan juga (ditambah banyak hal lainnya).
Philomath
10

pdftk adalah alat untuk melakukan beberapa operasi pada file PDF, seperti kompresi / dekompresi:

$ pdftk test.pdf output compressed_test.pdf compress
uloBasEI
sumber
Terima kasih! Saya bertanya-tanya bagaimana cara mengetahui apakah file pdf telah dikompres?
StackExchange for All
1
@Tim: pdfinfo file.pdfmemberi tahu Anda jika PDF dioptimalkan . Namun, saya tidak yakin apakah itu berarti terkompresi atau tidak.
nico
1
@uloBasEI: Saya mencoba perintah Anda menggunakan pdftk untuk kompresi, tetapi ukurannya hampir tidak berubah. Jika saya membuka kompresi, ukuran file menjadi dua kali lipat. Properti dari file asli, file terkompresi dan file tidak terkompresi semua menunjukkan mereka tidak dioptimalkan.
StackExchange for All
@nico: Terima kasih! Lihat komentar saya di atas dan pembaruan saya. Tampaknya kompresi dan optimisasi tidak menyiratkan satu sama lain?
StackExchange for All
1

Saya menemukan metode kompresi dalam file pdf. Buka PDF dengan editor teks. Jalankan Cari atau Cari-masuk CCITT jika tidak ditemukan, masukkan JPEG, lalu Flate, lalu JBIG2, lalu LZW, lalu RLE, dan kemudian ZIP.
Kedengarannya lebih buruk dari itu! Sangat mudah untuk menemukan metode kompresi aliran data.

bizhubkey1
sumber
Ini agak rapuh. Saya menggunakan metode Anda untuk memeriksa file PDF terkompresi (tidak dikompresi oleh qpdf) menggunakan grep seperti pada grep -E "(CCITT | JPEG | Flate | LZW | RLE | ZIP)" uncompressed.pdf dan mengembalikan pesan ini File biner uncompressed.pdf cocok . Sepertinya mendeteksi file uncompressed.pdf mengandung pola LZW dan RLE.
user91822
-1

Cukup periksa propertinya; itu akan mengatakan apakah file tersebut dikompres atau tidak.

rosni
sumber
Saya pikir pertanyaan Heidi adalah program apa yang memeriksa properti, khususnya dengan program berbasis perintah baris scriptable.
Caleb
> Cukup periksa propertinya - program [open source] mana yang bisa digunakan untuk melakukan ini, ??
Maxim