PDFTK
Установка PDFTK в CentOS 7
В CentOS 6 ставилось из коробки:
1 | sudo yum install -y pdftk.x86_64 |
В CentOS 7 же немного поплясять с гуглом, и о счастье — добрый самаритянин сделал неофициальный реп с pdftk:
1 2 3 | sudo wget https://copr.fedorainfracloud.org/coprs/robert/gcj/repo/epel-7/robert-gcj-epel-7.repo -P /etc/yum.repos.d sudo wget https://copr.fedorainfracloud.org/coprs/robert/pdftk/repo/epel-7/robert-pdftk-epel-7.repo -P /etc/yum.repos.d sudo yum install -y pdftk |
Рекомендую еще поставить полезный пакет poppler для манипуляций с PDF: sudo yum install -y poppler-data.noarch poppler.x86_64 poppler-utils.x86_64
Работа с метаданными
Если метаданные содержат кириллицу, то используем команды с суффиксом _utf8! Извлекаем мета-данные:
1 | pdftk board-schematic-v4.0.pdf dump_data_utf8 output meta.txt |
Редактируем мета-данные:
1 | joe meta.txt |
Обновляем мета-данные:
1 | pdftk board-schematic-v4.0.pdf update_info_utf8 meta.txt output board-schematic-v4.0-meta.pdf |
Если только латиница, то команды без _utf8:
1 2 3 4 | #Edit Existing Meta-Data: pdftk book.pdf dump_data output meta.txt #Update PDF Meta-Data: pdftk book.pdf update_info meta.txt output bookcopy.pdf |
Добавление водных знаков на страницы PDF
Выберем какое-нибудь красивое япанское лого для примера: https://commons.wikimedia.org/wiki/Category:6_letter_alphabet_logos_of_Japan
устанавливаем зависимости:
1 | sudo yum install -y librsvg2-tools |
готовим ватермарки (надо векторно перевести SVG -> PDF):
1 | rsvg-convert -f pdf -o topcon.pdf topcon-company-logo.svg |
добавляем ватермарки:
1 | pdftk board-schematic-v4.0.pdf background topcon.pdf output board-schematic-v4.0-bg.pdf |
сжимаем получившийся PDF:
1 | pdftk board-schematic-v4.0-bg.pdf output board-schematic-v4.0-bg-compress.pdf compress |
Причёсывание SVG перед использованием
Может понадобиться сделать две вещи перед вставкой водного знака:
масштабирование
Для этого меняем размеры холста файла SVG
выбор более подходящего цвета
за цвет лого отвечает такая конструкция: style=»fill:##007088″ в SVG. Ок, меняем цвет на #0B2AD:
1 | sed -i 's/fill:#007088/fill:#0B2AD/g' logo.svg |
Удаление текстовых водных знаков из PDF
Иногда организация просит для ускорения процесса покупать самому те или иные стандарты как частное лицо. И всё бы ничего — но в документы обычно впечатываются ватермарки с Именем-Фамилией и номером заказа, и может вы не желаете и не станете шарить и распространять, но за всех круг лиц, которые имеют доступ к документу ручаться не можете, поэтому лучше из документа информацию о персоналии выпилить с корнем, что для этого надо:
— Удаляем пароль владельца любым доступным способом
— Разархивируем файл:
1 | pdftk ISO-26262-1-2011.pdf output ISO-26262-1-2011-uncompressed.pdf uncompress |
— Теперь ищем ключевую фразу и удаляем/заменяем её:
1 | sed 's/your surname here/nulled/g' ISO-26262-1-2011-uncompressed.pdf > ISO-26262-1-2011-filtered.pdf |
— Самый важный этап (долго не мог понять как обойти когда не дошёл до этого шага) — прогоняем PDF через pdftk чтобы восстановить поврежденные правкой чексам и прочие элементы:
1 | pdftk ISO-26262-1-2011-filtered.pdf output ISO-26262-1-2011-fixed.pdf |
— Архивируем для уменьшения размера документа:
1 | pdftk ISO-26262-1-2011-fixed.pdf output ISO-26262-1-2011-compressed.pdf compress |
— Если необходимо, восстанавливаем оригинальную защит уи права на документ:
1 | pdftk ISO-26262-1-2011-compress.pdf output ISO-26262-1-2011-encrypted.pdf owner_pw original_passphrase_here allow Printing allow CopyContents |
— Успех!
!Note: всё тоже самое можно засунуть в баш-скрипт для пакетной обработки документов.
Однострочники (Операции с PDF в CLI)
Сборка из нескольких PDF одного многостраничного
Например, когда из PCAD печатаешь в PDF он печатает в несколько одностраничных файлов, исправляем ситуацию:
1 | pdftk *.pdf cat output board-schematic-v4.0.pdf |
Делаем из PDF -> JPG
1 | #!/bin/bash # Script to convert PDF file to JPG images # Dependencies: # * pdftk # * imagemagick PDF=$1 echo "Processing $PDF" DIR=`basename "$1" .pdf` mkdir "$DIR" echo ' Splitting PDF file to pages...' pdftk "$PDF" burst output "$DIR"/%04d.pdf pdftk "$PDF" dump_data output "$DIR"/metadata.txt echo ' Converting pages to JPEG files...' for i in "$DIR"/*.pdf; do convert -colorspace RGB -interlace none -density 300x300 -quality 100 "$i" "$DIR"/`basename "$i" .pdf`.jpg done echo 'All done' |
или так, если надо не перевести страницы в картинки, а извлечь уже существующие картинки:
1 | pdfimages -png bonding_diagram_12_05.pdf CQFP100L |
тут CQFP100L — папка, в которую складываются файлы-картинки
или даже так:
1 | convert -units PixelsPerInch -density 450 -rotate 270 CQFP100L.pdf CQFP100L.pdf.png |
- density — разрешение выходных картинок в DPI
- rotate — на сколько градусов развернуть итоговое изображение
Снятие защиты для возможности распечатать файл
https://smallpdf.com/unlock-pdf — An easy-to-use online PDF password remover Если по каким-то причинам не сработало, то ставим «Password Recovery Tool for PDF files»:
1 | sudo yum install -y pdfcrack.x86_64 |
Запуск:
1 2 3 4 5 6 7 | $ pdfcrack -f secret.pdf -o ... ... Average Speed: 47864.8 w/s. Current Word: 'E1meit' Average Speed: 47862.9 w/s. Current Word: 'i3niit' found owner-password: 'zfkmit' found user-password: '' |
Но скорость мала, потому как в один поток, зато из коробки. Если охота заморочиться и на работе простаивает сервер с 32 ядрами, то гуглим pdfcrack-multithread что выводит нас на проект https://github.com/x2q/pdfcrack-ng