PDFTK
Установка PDFTK в CentOS 7
В CentOS 6 ставилось из коробки:
sudo yum install -y pdftk.x86_64
В CentOS 7 же немного поплясять с гуглом, и о счастье - добрый самаритянин сделал неофициальный реп с pdftk:
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! Извлекаем мета-данные:
pdftk board-schematic-v4.0.pdf dump_data_utf8 output meta.txt
Редактируем мета-данные:
joe meta.txt
Обновляем мета-данные:
pdftk board-schematic-v4.0.pdf update_info_utf8 meta.txt output board-schematic-v4.0-meta.pdf
Если только латиница, то команды без _utf8:
#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
устанавливаем зависимости:
sudo yum install -y librsvg2-tools
готовим ватермарки (надо векторно перевести SVG -> PDF):
rsvg-convert -f pdf -o topcon.pdf topcon-company-logo.svg
добавляем ватермарки:
pdftk board-schematic-v4.0.pdf background topcon.pdf output board-schematic-v4.0-bg.pdf
сжимаем получившийся PDF:
pdftk board-schematic-v4.0-bg.pdf output board-schematic-v4.0-bg-compress.pdf compress
Причёсывание SVG перед использованием
Может понадобиться сделать две вещи перед вставкой водного знака:
- масштабирование - для этого меняем размеры холста файла SVG
- выбор более подходящего цвета - за цвет лого отвечает такая конструкция: style=“fill:##007088” в SVG. Ок, меняем цвет на #0B2AD:
sed -i 's/fill:#007088/fill:#0B2AD/g' logo.svg
Удаление текстовых водных знаков из PDF
Иногда организация просит для ускорения процесса покупать самому те или иные стандарты как частное лицо. И всё бы ничего - но в документы обычно впечатываются ватермарки с Именем-Фамилией и номером заказа, и может вы не желаете и не станете шарить и распространять, но за всех круг лиц, которые имеют доступ к документу ручаться не можете, поэтому лучше из документа информацию о персоналии выпилить с корнем, что для этого надо:
Удаляем пароль владельца любым доступным способом
Разархивируем файл:
pdftk ISO-26262-1-2011.pdf output ISO-26262-1-2011-uncompressed.pdf uncompress
Теперь ищем ключевую фразу и удаляем/заменяем её:
sed 's/your surname here/nulled/g' ISO-26262-1-2011-uncompressed.pdf > ISO-26262-1-2011-filtered.pdf
Самый важный этап (долго не мог понять как обойти когда не дошёл до этого шага) - прогоняем PDF через pdftk чтобы восстановить поврежденные правкой чексам и прочие элементы:
pdftk ISO-26262-1-2011-filtered.pdf output ISO-26262-1-2011-fixed.pdf
Архивируем для уменьшения размера документа:
pdftk ISO-26262-1-2011-fixed.pdf output ISO-26262-1-2011-compressed.pdf compress
Если необходимо, восстанавливаем оригинальную защит уи права на документ:
pdftk ISO-26262-1-2011-compress.pdf output ISO-26262-1-2011-encrypted.pdf owner_pw original_passphrase_here allow Printing allow CopyContents
Успех!
Совет
Всё тоже самое можно засунуть в баш-скрипт для пакетной обработки документов.
Однострочники (Операции с PDF в CLI)
Сборка из нескольких PDF одного многостраничного
Например, когда из PCAD печатаешь в PDF он печатает в несколько одностраничных файлов, исправляем ситуацию:
pdftk *.pdf cat output board-schematic-v4.0.pdf
Делаем из PDF -> JPG
pdf2jpg.sh:
#!/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'
или так, если надо не перевести страницы в картинки, а извлечь уже существующие картинки:
pdfimages -png bonding_diagram_12_05.pdf CQFP100L
тут CQFP100L - папка, в которую складываются файлы-картинки
или даже так:
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”:
sudo yum install -y pdfcrack.x86_64
Запуск:
$ 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