PDFTK

Описание программы
© Александр Клименков (http://aklimenkov.blogspot.com), 2009
Исходное авторское описание
Сайт программы

Общее описание программы
Формат запуска программы
Список исходных файлов
Задание паролей для открытия исходных файлов
Использование операторов
Выбор исходных страниц
Присоединение файлов
Извлечение присоединенных файлов
Разделение исходного файла на отдельные страницы
Автоматическое заполнение PDF форм
Включение водяных знаков в PDF
Получение метаданных исходного файла
Получение информации о заполнении форм
Изменение метаданных
Задание имени итогового файла
Дополнительные параметры запуска
Способ шифрования
Задание разрешений
Задание паролей
Включение и отключение сжатия
Объединение информации PDF формы с файлом
Запрос на выход
Отключение предупреждающих сообщений
Примеры


Общее описание программы

PDFTK — консольная (запускаемая из командной строки) программа, позволяющая производить различные манипуляции с файлами формата PDF. Все параметры программы задаются через командную строку.

Программа позволяет выполнять следующие действия:


Формат запуска программы

Обязательная начальная строка:
pdftk Исходные файлы PDF или  —  или PROMPT
Дополнительные опциональные блоки:
input_pw Пароль PDF или PROMPT
Название оператора Аргументы оператора
output Итоговый файл PDF или  —  или PROMPT
encrypt_40bit или encrypt_128bit
allow Список разрешений
owner_pw Пароль владельца или PROMPT
user_pw Пароль пользователя или PROMPT
flatten
compress или uncompress
verbose
dont_ask или do_ask

Для получения справки по программе надо выполнить команду pdftk --help или pdftk -h


Список исходных файлов

Список исходных файлов может состоять из одного или нескольких имен файлов. Если файлов несколько, их имена перечисляются через пробел. В том случае, если планируется выполнить с помощью программы объединение исходных файлов в один, их имена нужно указывать в том порядке, в котором они должны идти в итоговом файле.

Исходным файлам можно назначать псевдонимы — большие латинские буквы. В дальнейшем эти псевдонимы могут использоваться в задании параметров некоторых дополнительных блоков, входящих в формат строки запуска программы (при задании паролей, диапазонов страниц). Псевдонимы задаются следующим образом:

Буква-псевдоним = Имя исходного файла

Примеры:
input1.pdf input2.pdf
A=input1.pdf B=input2.pdf

Если вместо списка исходных файлов указано служебное слово PROMPT, имя исходного файла будет запрошено у пользователя непосредственно в процессе выполнения программы.

В качестве списка исходных файлов можно использовать маски. Например, для того, чтобы задать в качестве исходных файлов все файлы pdf, расположенные в текущем каталоге, можно вместо перечисления файлов указать:

*.pdf

Список исходных файлов может отсутствовать (например, в том случае если требуется сформировать новый файл при помощи различных операторов). В этом случае вместо списка исходных файлов указывается символ "-".


Задание паролей для открытия исходных файлов

В том случае, если исходные файлы защищены паролями, необходимо ввести эти пароли в строке запуска программы. Для этого предназначена команда input_pw. После этой команды через пробел указываются пароли ко всем исходным файлам. При этом можно либо указывать пароли подряд в том же порядке, в котором идут исходные файлы, либо воспользоваться псевдонимами, заданными при указании списка исходных файлов:

Буква-псевдоним = Пароль к исходному файлу с данным псевдонимом

Примеры:
input_pw password1 password2
input_pw A=password1 B=password2

Использование операторов

С помощью операторов можно произвести различные операции над исходными файлами перед их сохранением в итоговый файл. Некоторые операторы требуют обязательного указания аргументов.

В программе доступны следующие операторы:


Выбор исходных страниц

Оператор cat используется для отбора определенных страниц из исходного файла, которые затем будут включены в итоговый файл. В качестве аргументов оператора задается список диапазонов страниц:

cat Список диапазонов страниц

Отдельные диапазоны разделяются пробелом. Диапазоны указываются следующим образом:

Буква-псевдоним Номер начальной страницы - Номер конечной страницы

Например, для того, чтобы отобрать из файла с псевдонимом "B" первые пять страниц надо записать оператор cat следующим образом:

cat B1-5

В разных диапазонах можно ссылаться на один и тот же псевдоним несколько раз. Например, можно сначала выбрать из файла с псевдонимом "А" страницы с 8-ой по 11-ую, а затем с 1-ой по 3-ю, при этом вставив между ними страницы с 1-ой по 9-ую из файла с псевдонимом "B":

cat A8-11 B1-9 A1-3

В том случае, если требуется включить в диапазон все страницы из файла с указанным псевдонимом, можно в качестве диапазона просто указать псевдоним файла, а номера начальной и конечной страницы опустить. Например, в следующем примере, в отличие от предыдущего, в итоговый файл будут включены все страницы файла с псевдонимом "B":

cat A8-11 B A1-3

В том случае, если из файла с определенным псевдонимом требуется выбрать только одну страницу, можно указать только номер этой страницы:

cat A56

Перед указанием диапазона можно опустить букву-псевдоним. В этом случае выбор страниц будет производиться из первого исходного файла.

Если оператор cat запускается без аргументов, то в итоговый файл будут полностью включены все исходные файлы, один за другим, в том порядке, в котором они заданы в списке исходных файлов.

Служебное слово end

В том случае, если диапазон заканчивается на последней странице файла, можно вместо номера этой страницы указать служебное слово end. Например, с помощью приведенного ниже оператора можно отобрать из файла с псевдонимом "A" страницы с 10-ой по последнюю:

cat A10-end

Страницы в обратном порядке

Номер конечной страницы диапазона может быть больше номера начальной страницы. В этом случае при формировании итогового файла страницы будут выстраиваться в обратном порядке. Например, в следующем примере из файла с псевдонимом "A" будут выбраны в обратном порядке все страницы с 20-ой по 3-ю:

cat A20-3

Для того, чтобы выбрать все страницы файла с псевдонимом "A" в обратном порядке можно воспользоваться следующим оператором:

cat Aend-1

Четные и нечетные страницы

Для того, чтобы из определенного диапазона выбрать только четные или нечетные страницы, используются служебные слова even и odd (соответственно). Эти слова записываются непосредственно после задания диапазона (без пробела). Например, для того, чтобы выбрать из файла с псевдонимом "A" только четные страницы между 18-ой и 30-ой, можно воспользоваться следующим оператором:

cat A18-30even

В следующем примере будут выбраны все нечетные страницы из файла с псевдонимом "B":

cat Bodd

Присоединение файлов

Оператор attach_files используется для вставки различных внешних файлов в исходный файл (обрабатывается только один исходный файл) в виде вложений (attachment). В качестве аргументов оператора задается список внешних файлов и, если это необходимо, номер страницы исходного файла, к которой будут приложены файлы:

attach_files Список присоединяемых файлов или PROMPT to_page Номер страницы или PROMPT

Если вместо списка присоединяемых файлов указано служебное слово PROMPT, имя присоединяемого файла будет запрошено у пользователя непосредственно в процессе выполнения программы.

С помощью параметра to_page задается номер страницы исходного файла, к которой будут приложены файлы. Если вместо номера страницы указано служебное слово PROMPT, этот номер будет запрошен у пользователя непосредственно в процессе выполнения программы.

Примеры:
attach_files table1.html table2.html to_page 6

Параметр to_page может быть опущен. В этом случае присоединяемые файлы будут приложены к исходному файлу без указания конкретной страницы.


Извлечение присоединенных файлов

Оператор unpack_files используется для извлечения файлов-вложений, присоединенных к исходному файлу (обрабатывается только один исходный файл). В качестве аргумента оператора задается путь к каталогу, в который следует произвести запись извлеченных файлов:

unpack_files output Каталог для извлечения файлов или PROMPT

Имя каталога может быть опущено. В этом случае файлы будут извлечены в текущий каталог.

Если вместо имени каталога указано служебное слово PROMPT, имя каталога будет запрошено у пользователя непосредственно в процессе выполнения программы.

Пример:
unpack_files output ~/files/

Разделение исходного файла на отдельные страницы

С помощью оператора burst можно выполнить разделение исходного файла на отдельные страницы. Каждая страница будет записана в отдельный файл PDF.

По умолчанию имена новых файлов будут иметь следующий формат: pg_0001.pdf, pg_0002.pdf и т.д. Для того, чтобы изменить формат имен файлов можно воспользоваться специальными шаблонами, задаваемыми в блоке output. Шаблоны представляют собой последовательность символов с обязательным включением специальной конструкции:

%0nd
где n - число разрядов в номере

Например, для того, чтобы итоговые файлы имели номера: page-01.pdf, page-02.pdf и т.д., нужно задать следующий шаблон:

page-%02d.pdf

В том случае, если принимается формат итоговых файлов, заданный по умолчанию, блок output может быть опущен.

В текущем каталоге также будет создан текстовый файл "doc_data.txt" с отчетом о выполнении оператора.


Автоматическое заполнение PDF форм

С помощью оператора fill_form можно выполнить автоматическое заполнение форм в исходном PDF файле (обрабатывается только один исходный файл). Информация для заполнения форм загружается из специального файла формата FDF или вводится непосредственно в момент выполнения программы.

fill_form Имя файла FDF или  —  или PROMPT

Исходный файл с заполненной формой сохраняется в итоговый файл, указанный в блоке output. После заполнения форма по умолчанию остается интерактивной и доступной для редактирования (например, при открытии этого файла в программе Acrobat Reader). Если в команду исполнения включен блок flatten, то информация для заполнения формы объединяется с pdf-файлом и форма становится недоступной для редактирования.

Если вместо имени файла FDF указано служебное слово PROMPT, информация для заполнения формы будет запрошена у пользователя непосредственно в процессе выполнения программы.

Пример:
fill_form data.fdf

Если исходный FDF-файл включает в себя кроме обычного текста, блоки в формате RTF, то эти блоки при заполнении форм будут включены в PDF как обычный текст. При этом программа установит в PDF файле специальный признак, который указывает на то, что данная часть текста имеет формат RTF. В дальнейшем, при открытии данного файла в программе Acrobat (или Acrobat Reader), в нем будет создано новое поле в формате RTF (при этом нужно помнить, что в этом случае не следует выполнять объединение информации с исходным PDF файлом с помощью блока flatten до того, как файл будет открыт в программе Acrobat или Acrobat Reader). Такой подход позволит корректно отображать PDF файл в программах просмотра, не поддерживающих RTF-поля.


Включение водяных знаков в PDF

С помощью оператора background можно включить на каждую страницу исходного файла (обрабатывается только один исходный файл) фоновые водяные знаки (watermark), изображение которых загружается из файла, указанного в атрибутах данного оператора.

background Имя файла PDF с изображением или  —  или PROMPT

В качестве изображения для водяных знаков используется содержимое первой страницы указанного файла. Фоновые водяные знаки создаются на каждой странице исходного файла. При этом изображение автоматически разворачивается, сжимается или растягивается для полного заполнения страниц исходного файла.

Если вместо имени файла PDF с изображением указано служебное слово PROMPT, имя этого файла будет запрошено у пользователя непосредственно в процессе выполнения программы.


Получение метаданных исходного файла

С помощью оператора dump_data можно получить отчет об различных параметрах исходного файла (обрабатывается только один исходный файл): различные статистические данные, метаданные, закладки, метки страниц и т.п. Информация выгружается в текстовом виде в файл, указанный в блоке output. Оператор dump_data не имеет аргументов. Если данный оператор включен в команду запуска программы, то независимо от наличия или отсутствия других операторов, PDF файл создаваться не будет.


Получение информации о заполнении форм в исходном файле

С помощью оператора dump_data_fields можно получить отчет о заполнении форм в исходном файле (обрабатывается только один файл). Информация выгружается в файл, указанный в блоке output. Оператор dump_data_fields не имеет аргументов. Если данный оператор включен в команду запуска программы, то независимо от наличия или отсутствия других операторов, PDF файл создаватьс не будет.


Изменение метаданных

С помощью оператора update_info можно изменить метаданные исходного файла (обрабатывается только один файл). Загрузка метаданных выполняется их файла, формат которого совпадает с форматом файла, получаемого при выполнении оператора dump_data.

update_info Имя файла с метаданными или  —  или PROMPT

Исходный файл с измененными метаданными сохраняется в итоговый файл, указанный в блоке output.

Если вместо имени файла с метаданными указано служебное слово PROMPT, имя файла будет запрошено у пользователя непосредственно в процессе выполнения программы.


Задание имени итогового файла

Для указания имени итогового файла, в который будет выгружен результат работы программы, используется команда output.

output Имя итогового файла или  —  или PROMPT

Если вместо имени итогового файла указано служебное слово PROMPT, имя файла будет запрошено у пользователя непосредственно в процессе выполнения программы.


Дополнительные параметры запуска

Способ шифрования

В случае, если производится шифрование итогового файла с паролем, можно явно указать глубину шифрования: encrypt_40bit или encrypt_128bit. Второе значение устанавливается по умолчанию.

Задание разрешений

Для итогового файла можно задать набор разрешений на возможность выполнения с ним тех или иных действий. Разрешения могут быть заданы только в том случае, если указан административный или пользовательский пароль. Для задания списка разрешений используется команда allow. После нее через запятую вводится набор из допустимых разрешений для данного файла. Если разрешения не указаны, то считается, что все перечисленные ниже действия запрещены. Разрешения могут быть следующими:
Printing — высококачественная печать;
DegradedPrinting — низкокачественная печать;
ModifyContents — разрешение на редактирование файла (также включает разрешение Assembly);
Assembly;
CopyContents — разрешение на копирование информации (также включает разрешение ScreenReaders);
ScreenReaders;
ModifyAnnotations (также включает разрешение FillIn);
FillIn
AllFeatures — включает для пользователя все указанные выше разрешения.

Задание паролей

Для задания административного пароля используется команда owner_pw. Для задания пользовательского пароля используется команда user_pw. После этих команд вносятся соотвествующие пароли. Вместо паролей можно указать служебное слово PROMPT. В этом случае соответствующие пароли будут запрошены у пользователя непосредственно в момент выполнения программы. Если дана команда на шифрование данных, а пароли не заданы, то шифрование будет выполнено с пустым паролем, что равносильно отсутствию шифрования.

Включение и отключение сжатия

Отключение сжатия используется в том случае, если файл PDF планируется редактировать в текстовых редакторах (таких как Vim или Emacs). Отключение сжатия выполняется с помощью команды uncompress. Включение сжатия — с помощью команды compress.

Объединение информации PDF формы с файлом

Команда flatten инициирует объединение информации для заполнения формы с PDF файлом. После этого форма становится недоступной для редактирования.

Запрос на выход

По умолчанию после выполнения всех операций осуществляется выход из программы. Для того, чтобы выход выполнялся только после согласия пользователя, требуется включить в строку запуска программы команду verbose.

Отключение предупреждающих сообщений

В процессе работы программа может выдавать пользователю различные предупреждающие сообщения (например, в случае ввода некорректного пароля или при попытке перезаписать уже существующий файл). Для отключения подобных сообщений используется команда dont_ask. Для включения сообщений используется команда do_ask.


Примеры

Объединить два файла 1.pdf и 2.pdf в итоговый файл 3.pdf.

pdftk 1.pdf 2.pdf cat output 3.pdf
pdftk A=1.pdf B=2.pdf cat A B output 3.pdf

Объединить все файлы pdf из текущего каталога в итоговый файл all.pdf.

pdftk *.pdf cat output all.pdf

Удалить страницу номер 13 из файла begin.pdf и записать результат в файл out.pdf.

pdftk begin.pdf cat 1-12 14-end output out1.pdf
pdftk A=in1.pdf cat A1-12 A14-end output out1.pdf

Дешифровать файл защищенный паролем.

pdftk secured.pdf input_pw foopass output unsecured.pdf

Зашифровать файл с использванием 128-битного алгоритма шифрования (по умолчанию) со всеми разрешениями (по умолчанию). pdftk 1.pdf output 1.128.pdf owner_pw foopass

Зашифровать файл с заданием административного и пользовательского пароля (допускающего только открытие файла).

pdftk 1.pdf output 1.128.pdf owner_pw foo user_pw baz

Зашифровать файл с заданием административного и пользовательского пароля (допускающего открытие файла и его печать).

pdftk 1.pdf output 1.128.pdf owner_pw foo user_pw baz allow printing

Объединить два исходных файла в один. Первый исходный файл защищен паролем.

pdftk A=secured.pdf 2.pdf input_pw A=foopass cat output 3.pdf

Восстановить поврежденный файл PDF (если это возможно).

pdftk broken.pdf output fixed.pdf

Разбить исходный файл на страницы.

pdftk mydoc.pdf burst

Разбить исходный файл на страницы, защищенные паролем. Разрешить только низкокачественную печать.

pdftk mydoc.pdf burst owner_pw foopass allow Degraded-Printing

Записать информацию о метаданных и закладках исходного файла в текстовый файл "report.txt".

pdftk mydoc.pdf dump_data output report.txt