Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Kubuntu. Сжатие PDF, состоящего из изображений, в один клик  (Прочитано 1406 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zg_nico

  • Автор темы
  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Доброго времени суток, уважаемые форумчане!
Обозначу проблему: Часто по работе приходится заниматься сжатием документов pdf. Типовая задача: имеем отсканированный файл в приличном качестве с кому-то-очень-нужными-данными-сию-секунду, в котором чуть менее чем совсем туча страниц, и надо все это отправить по электронной почте, а вложения более 5 Мб почтовый сервер отбрасывает. По сути, выручает пакет ImageMagic с его замечательным convert. Однако, практика показывает, что для достижения приемлемого для чтения качества в купе с малым размером недостаточно просто выполнить convert исходный_большой_файл.pdf -quality 30% -resize 30% -colorspace Gray  маленький_файл.pdfстраницы файла на выходе получаются замыленными вплоть до полной нечитабельности в отдельных случаях.
(Нажмите, чтобы показать/скрыть)
Гораздо лучшее качество на практике дает такой алгоритм:
  • Извлечь изображения из PDF-документа
  • Каждое изображение в отдельности обработать при помощи convert, приведя к jpg (дает малый размер выходного pdf-файла) и применив к каждому изображению параметры сжатия
  • Все изображения склеить в новый pdf-документ, который переименовать по аналогии с старым
Будучи человеком от природы ленивым, проделав все эти манипуляции пару раз, я пришел к выводу о необходимости составления скрипта, который будет выполнять это автоматически. Кроме того, с поправкой на используемое DE (Kubuntu 18.04), скрипт должен быть "интегрирован" в оболочку, дабы можно было вызывать его прямо в файловом менеджере из контекстного меню.
Предлагаемое решение не блещет ни оригинальностью, ни изяществом (поясняю: я не программист - мне главное чтоб работало), вместе с тем работоспособно, а потому предлагаю его вниманию сообщества, дабы страждущие вроде меня могли его "нагуглить" и пользовать в свое удовольствие. Для установки необходимо и достаточно создать два текстовых файла и присвоить им права. В случае если зависимости удовлетворены (см. коментарий скрипта) работа сразу возможна; если не удовлетворены - выполнить команду из комментария скрипта .sh и далее проблем быть не должно).
(Нажмите, чтобы показать/скрыть)
Для добавления пункта в контекстное меню dolphin был создан еще один файл:
(Нажмите, чтобы показать/скрыть)
Файлу ~/.local/share/kservices5/ServiceMenus/pdf_comptress.sh следует дать права на исполнение.
Файлу ~/.local/share/kservices5/ServiceMenus/compress_pdf.desktop права не требуются.
Результат применения: в файловом менеджере находим интересующий нас PDF-файл, кликаем на нем правой кнопкой мышки, ищем пукнт меню "Действия" -> "Сжать PDF-файл [набор изображений]". Кликаем. Ожидаем окончания работы скрипта. В KDE по завершении будет выведено уведомление.
(Нажмите, чтобы показать/скрыть)
Для примера взял один из своих недавно сканированных файлов. На входе 18 Мб, на выходе 1,4 Мб. В почту пролезает без проблем и читается неплохо.
« Последнее редактирование: 12 Ноября 2018, 11:15:21 от zg_nico »
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
Не с той стороны подошли к решению вопроса, поэтому и первая команда не сработала как должна бы. Надо DPI уменьшать, а не размер.



PS '-quality' при конвертации pdf-pdf не работает почему-то.

PPS Еще можно не переводить в grayscale, а указать количество цветов - это тоже даст выигрыш в размере.
например, -colors 16

а вот самый "жёсткий" вариант (для фото и прочей графики не подойдет, только для документов):
$: convert -density 96 in.pdf -auto-level -brightness-contrast 0x100 -monochrome out.pdf
$: du -sh *                                                 
1,4M in.pdf
116K out.pdf

и по багам скрипта:
Если DPI pdf небольшое, в конечном файле будет жесть.


Немножко переписал скрипт - работает с DPI, как и должно быть, и с текстом работает, и подстановки понимает...
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 11 Октября 2018, 23:43:19 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн zg_nico

  • Автор темы
  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
ALiEN175, спасибо большое. Как за разяснение, так и за скрипт. Опробую как до ноутбука доберусь. Что касается жесткого метода - надо будет его испытать на нашей документации... Там помимо печатного текста есть графические вставки и рукописный текст. Отпишусь по итогам.
Еще раз большое спасибо! :)

Пользователь добавил сообщение 12 Октября 2018, 11:05:33:
ALiEN175, может зашел и не с той стороны. Однако мой файл описанными Вами алгоритмами ужимается хуже, чем постранично:
Код: (bash) [Выделить]
8,9M    compressed_test (1).pdf         #сжатый Вашим вариантом скрипта, параметры QUAL=100 DPI=96
1,6M    compressed_test (2).pdf         #сжатый Вашим вариантом скрипта, параметры QUAL=30 DPI=96 (изображение читается с трудом)
4,1M    compressed_test.pdf             #сжатый Вашим вариантом скрипта, параметры QUAL=30 DPI=200
1,5M    compress_test_my.pdf            #сжатый моим старым вариантом скрипта, img_quality=30, img_resize='30%', img_colorspace='Gray'
1,9M    out.pdf                         #сжатый командой convert -density 96 test.pdf -auto-level -brightness-contrast 0x100 -monochrome out.pdf
19M     test.pdf                        #исходный файл
По поводу исходного файла следует сказать отдельно: на работе стоит сканер с фирменной утилитой от производителя. Документ, который у меня сейчас сохранен (и с которым работаю) сканировался при выставлении в этой утилите DPI=300, цветовая палитра - оттенки серого. В итоге проверяя данный файл средствами identify я получаю полную белиберду, которая наводит меня на мысль о вранье со стороны фирменной утилиты: identify -verbose test.pdf | egrep "(Colorspace|Resolution|Geometry|Depth)"
  Geometry: 581x833+0+0
  Resolution: 72x72
  Colorspace: sRGB
  Depth: 16/8-bit
...
Видимо поэтому изменение DPI не дает должного эффекта. Исходный PDF сам по себе как-то криво собран. Хотя наверное я что-то не верно определяю, поскольку если данный файл скормить convert с единственным параметром  -resample 300, а полученный на выходе проверить аналогичным образом, то в графе Resolution все равно будет фигурировать 72x72
За наводку большое спасибо! Понял что можно развить скрипт для удобства применения. Особенно полезным для меня стал Ваш исходник. Узнал много такого, о чем ранее и не подозревал: начиная от механизма создания еще одного файла (я как-то и не думал, что следует так это реализовывать, - но как попробовал, понравилось), вплоть до mktemp (я и не подозревал о существовании такой полезной утилиты, и да rtfm :) ). Кроме того, отдельное спасибо за указание на это:Если DPI pdf небольшое, в конечном файле будет жесть.Воспроизвести пока не могу (приведенные выше изыскания показывают, что я вообще не могу определить DPI текущего документа по непонятным на момент для меня причинам), так что надо мне будет покумекать. Попытаюсь сделать некий симбиоз: получаем на входе pdf-документ, определяем для него оптимальный вариант сжатия, и применяем соответствующую цепочку шагов. К примеру, в файле, где только одни изображения (как мой) предлагаемый мною способ (с перепаковкой pdf через jpg) дает довольно хороший результат (в плане соотношения между компрессией и выходным качеством); вместе с тем, как писалось уже выше - если в файле не только изображения, то он вообще не применим, а предлагаемый Вами скрипт справляется (хоть и в сторону увеличения размера файла иногда, - испытывал на LFS-BOOK-8.3.pdf, выставляя DPI=96, QUAL=30; исходник: 1,7 Мб, выходной файл: 5,3 Мб). Пример плохой, т.к. идет преобразование текста в изображение, что неминуемо раздувает выходной файл, - но это наталкивает меня на мысль о целесообразности "разделения" мух и котлет путем анализа каждой страницы на предмет наличия в ней текста и изображений. Если есть текст - надо пытаться сохранить страницу "as_is" (PDFshuffler умеет это - подсмотрю как у них это реализовано, он вроде на python почти весь); если нет текста (только изображение) - то сжать его, и двигаться дальше. Займет это много времени, но буду ковыряться по мере сил, и отписываться, соответственно.
« Последнее редактирование: 12 Октября 2018, 11:05:33 от zg_nico »
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
Врёт, скорее сам identify.

еще как вариант, принудительно выставить 300 dpi, а потом уже уменьшать
convert -density 300 "$RP" -alpha remove -resample $DPI -quality $QUAL "$DIR/%04d.jpg"Правда, всю память может скушать, если страниц много
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн zg_nico

  • Автор темы
  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Врёт, скорее сам identify.
Похоже, что он в PDF не умеет определять разрешение вложенных изображений. Как ни экспериментировал - получается одно и то же значение на любых без исключения файлах PDF. Буду тормошить pypdf. Именно через него PDFshuffler работает, как я понял после беглого ознакомления с исходным кодом утилиты. Как только что получится - выложу. Тема получится долгоиграющая, к сожалению.
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

zse

  • Гость
     — Меня тоже тема интересует, естественно больше сжатие чем „один клик“😇! Клик то такое дело, было бы на что кликать!
     — До пенсии мы на работе делали много всякого djvu, не сами мы это конечно придумали, „мыслителей“ и командиров было достаточно, с этим всегда везде порядок😇!
     — _https://spaces.hightail.com/receive/eazpxmKCoQ Для сравнения можно или из этого материала сделать pdf меньше djvu но сопоставимого качества? У меня пока не получилось, качество не очень😕
     — DJVU всё делалось консольными программами, pdf на скорую руку делал из djvu, что ясное дело методологически неверно😞, но convert закапризничал (convert.im6: not authorized `001_38898721495_572D14f4ca_B.pdf' @ error/constitute.c/WriteImage/1072) нужно править /etc/ImageMagick/policy.xml
     — Неплохо бы было иметь эффективный инструмент для сжатия и получения малоразмерного файла pdf из картинок, хотелось бы чтобы тема получила развитие!!! 2018 Oct 12; 05:28 PM

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
DJVU изначально создавался с упором на хранение документов. Выигрыша от конвертации djvu-pdf вряд ли можно добиться.
(Нажмите, чтобы показать/скрыть)
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

zse

  • Гость
     — Да, ALiEN175, всё правильно Вы пишете!
     — Тут какая ситуация, pdf стал фактически стандартом документооборота, а став стандартом вытеснил из некоторых сфер другие способы представления смешанной текстовой и визуальной информации.
     — Мы как-то с zg_nico обсуждали смежную pdf-тему я так помню, что по работе ему нужно передавать определённый блок оперативной информации „невечного“ хранения и строго в pdf.
     — Я же хочу несколько расширить задачу, а именно имеется  N изображений смешанного тексто-визуального типа и нужно сравнить в каком из вариантов  положим (odt, tiff, pdf, djvu и т.п) соотношение размер файла — качество наиболее приемлемые. Положим это нужно для «внутреннего употребления».
     — Там по ссылке в предыдущем сообщении 4 картинки как источник и файлы tiff, pdf, djvu из этих картинок.
     2018 Oct 12; 10:43 PM

 

Страница сгенерирована за 0.057 секунд. Запросов: 24.