Журнал Эмбеддед-Инженера

PDF: советы и шпаргалки

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

— Успех!

!Note: всё тоже самое можно засунуть в баш-скрипт для пакетной обработки документов.

 

Однострочники (Операции с PDF в CLI)

Сборка из нескольких PDF одного многостраничного

Например, когда из PCAD печатаешь в PDF он печатает в несколько одностраничных файлов, исправляем ситуацию:

pdftk *.pdf cat output board-schematic-v4.0.pdf

 

Делаем из PDF -> JPG

[crayon lang=»shell» inline=»false» title=»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 300×300 -quality 100 «$i» «$DIR»/`basename «$i» .pdf`.jpg done echo ‘All done’ [/crayon]

или так, если надо не перевести страницы в картинки, а извлечь уже существующие картинки:

pdfimages -png bonding_diagram_12_05.pdf CQFP100L

тут CQFP100L — папка, в которую складываются файлы-картинки

или даже так:

convert -units PixelsPerInch -density 450 -rotate 270 CQFP100L.pdf CQFP100L.pdf.png

Снятие защиты для возможности распечатать файл

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

PS: если заметка помогла Вам, поделитесь ей с друзьями или коллегами: