Doka avatar

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

О микроэлектронике, радиотехнике и хобби

Dmitry Murzinov

5 минут чтения

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

Последние записи

Разделы