Як дізнатися, стискається чи ні PDF-файл, чи не (і) стискати його


18

Щойно я дізнався, що PDF-файли можна стиснути, щоб зменшити їх розмір диска.

  1. Мені було цікаво, як дізнатись, чи вже стислий PDF-файл?
  2. Які програми / команди можна використовувати для стиснення або розпакування файлу PDF?

Моє середовище - Linux Ubuntu 10.10.


Деякі спроби не дають задовільних результатів:

  1. Ось результати спроб 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
    

    Властивості файлів показують, що всі вони не оптимізовані.

  2. Результати перетворення в ps, а потім назад у 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
    

Я не можу перевірити його зараз, оскільки у мене немає стислого PDF під рукою, але спробуйте file. Він повинен показувати, стискається чи ні файл.
полемон

1
@polemon: Дякую! Це не так. З покласти $file 3.pdfє3.pdf: PDF document, version 1.4
StackExchange для всіх

Зауважте, що окремі потоки у PDF-файлі можуть стискатися. Тож запитувати "чи весь файл PDF стиснений" - це неправильне запитання (хоча в багатьох випадках всі, або більшість потоків будуть або стислі, або не стиснуті).
dirkt

Відповіді:


30

коротко:

Щоб знати, чи вона вже стиснута:

strings your.pdf | grep /Filter

Щоб (не) стиснути PDF, використовуйте QPDF

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

пояснення:

Ключове слово "Фільтр" всередині файлу PDF - це показник використовуваного методу стиснення. Деякі з них:

CCITT G3 / G4 - використовується для монохромних зображень
JPEG - алгоритм втрат, який використовується для зображень
JPEG2000 - більш сучасна альтернатива JPEG, яка також використовується для стиснення зображень
Flate - використовується для стиснення тексту, а також зображень
JBIG2 - альтернатива Стиснення CCITT для монохромних зображень
LZW - використовується для стиснення тексту, а також зображень, але замінюється Flate
RLE - використовується для монохромних зображень
ZIP - використовується для кольорів сірого або кольорового зображення

(скопійовано звідси ).

Однак, зважаючи на складну структуру файлів PDF, більшу частину часу якась частина (або "потік") PDF буде стискатися вже певним чином (і відображатиметься під час копіювання / фільтру), тоді як інша частина не буде, так немає відповіді ТАК / НІ на питання, чи стискається PDF-файл.
Одним із способів подолати це було б додати -cпараметр grep, який повертає кількість подій, щоб ви могли відносно добре стискати його. наприклад, якщо повертається менше 10, це дуже не стиснуто.strings "large.pdf" | grep -c /Filter

Ще одна властивість, що стосується розміру в PDF-файлах, полягає в тому, чи вони були оптимізовані для швидкого доступу, причому "оптимізовані" PDF-файли мають більший розмір, цитуючи з wikipedia :

Для файлів PDF є два макети: нелінійна (не "оптимізована") та лінійна ("оптимізована"). Нелінійні PDF-файли займають менше дискового простору, ніж їх лінійні аналоги, хоча вони доступні повільніше, оскільки частини даних, необхідні для збирання сторінок документа, розкидані по файлу PDF. Лінійні PDF-файли (також їх називають "оптимізованими" або "оптимізованими веб-файлами" PDF-файли) побудовані таким чином, що вони можуть читати їх у плагіні веб-браузера, не чекаючи завантаження всього файлу, оскільки вони записуються на диск у лінійна (як у порядку сторінки) мода. PDF-файли можуть бути оптимізовані за допомогою програмного забезпечення Adobe Acrobat або QPDF.

Ви можете перевірити, чи оптимізовано PDF-файл за допомогою pdfinfo your.pdf.


Спасибі! (1) Результати використання qpdf схожі на використання pdftk: при компресі розмір насправді став трохи більшим (дивним), а при розтисканні розмір став набагато більшим, майже вдвічі. (2) Чи намагаються pdftk та gpdf виконати одне і те ж, використовуючи параметри стискання та розпакування?
StackExchange для всіх

@Tim: (вибачте, що я не був тут). для (1), як я пояснив, PDF вже частково стискається (найімовірніше), тому стискання не надто економить (а декомпресія робить його значно більшим, тому що він стискає всі стислі потоки). (2) найімовірніше qpdfі pdftkробити те саме, що стосується стиснення, але також qpdfможе оптимізувати (плюс багато іншого).
Філомат

10

pdftk - це інструмент для виконання деяких операцій над файлами PDF, наприклад стиснення / декомпресія:

$ pdftk test.pdf output compressed_test.pdf compress

Спасибі! Мені було цікаво, як дізнатись, чи вже стиснутий pdf-файл?
StackExchange для всіх

1
@Tim: pdfinfo file.pdfповідомляє, чи оптимізовано PDF-файл . Однак я не впевнений, означає це стиснення чи ні.
nico

1
@uloBasEI: Я спробував вашу команду, використовуючи pdftk для стиснення, але розмір майже не змінився. Якщо я розпакую, розмір файлу подвійний. Властивості оригінального файлу, стисненого та нестисненого файлів показують, що вони не оптимізовані.
StackExchange для всіх

@nico: Дякую! Дивіться мій коментар вище та моє оновлення. Здається, що стиснення та оптимізація не передбачають одне одного?
StackExchange для всіх

@Tim: дивіться також це: pandemoniumillusion.wordpress.com/2008/05/07/…
nico

1

Я знайшов метод стиснення у файлі pdf. Відкрийте PDF-файл за допомогою текстового редактора. Запустіть CCITT для пошуку або пошуку, якщо його не знайдено, введіть JPEG, потім Flate, потім JBIG2, потім LZW, потім RLE, а потім ZIP.
Звучить гірше, ніж є! Дуже легко знайти метод стиснення потоку даних.


Це досить іффі. Я використовував свій метод , щоб перевірити нестислий PDF (нестислий по qpdf) файл , використовуючи Grep , як і в Grep -Е «(CCITT | JPEG | Flate | LZW | RLE | ZIP )» uncompressed.pdf і повертає це повідомлення Двійковий файл uncompressed.pdf сірники . Схоже, він виявляє нестиснений.pdf файл, що містить як LZW, так і RLE шаблони.
користувач91822

-1

Просто перевірте його властивості; він скаже, стискається чи ні файл.


Я думаю, що питання Хайді полягає в тому, з якою програмою перевіряти властивості, зокрема з програмами на основі командного рядка, написаними на скриптах
Калеб

> Просто перевірте його властивості - яку програму [open source] можна було б використовувати для цього, хоча ??
Максим
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.