PDFtk Server

PDFtk Server — бесплатная консольная программа для локального объединения, разделения, поворота, защиты и пакетной обработки PDF-файлов. Она запускается из командной строки Windows, macOS или Linux, не требует Adobe Acrobat и особенно удобна для сценариев, серверных заданий и повторяемых операций с документами.

Главная особенность PDFtk Server — отсутствие отдельного графического окна: пользователь описывает операцию одной командой, указывает входные документы, диапазоны страниц, параметры и имя результата. Такой подход требует аккуратного синтаксиса, зато хорошо воспроизводится, переносится в пакетные файлы и не заставляет вручную повторять одинаковые действия для десятков документов.

Программа работает со структурой PDF, а не как визуальный редактор страниц. Она умеет собирать и переставлять листы, заполнять формы из FDF или XFDF, накладывать PDF-штамп, менять метаданные, извлекать вложения и задавать пароль, но не предназначена для непосредственного исправления абзацев, распознавания сканов или рисования аннотаций мышью.

Скачать PDFtk Server

Оценка 9.7 Рекомендуем
  • Редактирование PDF
  • Русский интерфейс
  • Просто новичкам
Скачать бесплатно на Windows
Лучшая альтернатива
PDFtk Server
Оценка 8.5
  • Только командная строка
  • Нет просмотра страниц
  • Не редактирует текст
Скачать PDFtk Server
Загрузка начнётся после нажатия

Что именно называется PDFtk Server

PDFtk расшифровывается как PDF Toolkit. Под именем PDFtk Server распространяется исходная консольная редакция, созданная Сидом Стюардом и выпускавшаяся PDF Labs. Слово Server не означает облачный кабинет или сайт для загрузки документов: это локальный исполняемый инструмент, рассчитанный в том числе на вызов из серверных сценариев. Файл обрабатывается на компьютере, где запущена команда, а результат записывается в указанную папку или передаётся через стандартный поток вывода.

Эту редакцию важно отличать от PDFtk Free и PDFtk Pro. Free и Pro — графические приложения для Windows, в которых команды представлены элементами окна; Server — самостоятельное ядро с интерфейсом командной строки. Установщик графической редакции может включать консольный компонент, однако название PDFtk Server относится именно к утилите pdftk, а не к окну со списком файлов. Ещё одно отдельное решение — pdftk-java, созданный сообществом перенос поведения PDFtk на Java. Он сохраняет значительную часть синтаксиса, но имеет другого сопровождающего, иной набор сборок и собственную историю выпусков.

Последний официальный выпуск классической ветви имеет номер 2.02 и датирован 24 июля 2013 года. Этот факт не превращает программу в онлайн-сервис и не меняет её назначение: официальный сайт по-прежнему описывает локальное применение и предлагает установщик для Windows. При выборе пакета следует сверять не только слово PDFtk в названии, но и имя файла, номер 2.02, издателя PDF Labs и отсутствие стороннего загрузчика.

Для каких задач подходит программа

Сильная сторона PDFtk Server — операции, которые можно однозначно описать через входные документы и номера страниц. Типичный пример: объединить договор, приложение и акт в один файл; удалить пустой лист; повернуть только отсканированные страницы; разделить многостраничный пакет на отдельные документы; чередовать нечётный и чётный сканы; наложить подготовленный бланк; выгрузить поля формы; добавить пароль или снять разрешённую владельцем защиту. Все эти действия не требуют визуального редактирования содержания.

Консольный формат особенно полезен там, где одна и та же процедура повторяется. Команда может быть сохранена в BAT, PowerShell, Bash, Makefile, планировщике задач или серверном приложении. Имена файлов и диапазоны подставляются автоматически, поэтому оператор не открывает каждый документ вручную. При этом PDFtk Server не является полноценной библиотекой с программным API: интеграция обычно строится через запуск отдельного процесса и проверку его кода завершения, стандартного вывода и диагностического потока.

  • пакетная сборка комплектов из заранее известных частей;
  • перестановка, извлечение и поворот страниц без рендеринга;
  • заполнение AcroForm данными FDF или XFDF;
  • экспорт метаданных, закладок и описаний полей;
  • наложение PDF-фона или штампа;
  • работа с вложенными файлами и базовой парольной защитой.

Если задача начинается со слов найти опечатку на странице и исправить её, распознать текст скана, замазать персональные данные, нарисовать подпись или экспортировать таблицу в Excel, нужен другой класс приложения. PDFtk Server может участвовать в составном процессе до или после такого редактора, но сам не выполняет эти действия.

Как устроен интерфейс командной строки

После установки не появляется рабочая область с миниатюрами. Интерфейсом служит Windows Terminal, Командная строка, PowerShell, Terminal в macOS либо оболочка Linux. Пользователь вводит имя программы, перечисляет входные файлы, выбирает операцию, задаёт параметры и завершает конструкцию словом output с именем результата. Справка выводится командой pdftk --help, а версия — pdftk --version.

Справка PDFtk Server в командной строке Windows

Базовая схема выглядит так:

pdftk входные_файлы операция параметры output результат.pdf

Например, в конструкции pdftk part1.pdf part2.pdf cat output complete.pdf первые два имени являются входами, cat задаёт сборку страниц, а всё после output относится к создаваемому документу. Порядок токенов важен: произвольная перестановка слов приводит к ошибке разбора или к иному результату.

Некоторые режимы не создают PDF. Операции dump_data, dump_data_fields и родственные им печатают текстовый отчёт; его можно направить в файл через встроенный параметр output. Режим burst, наоборот, создаёт набор файлов по шаблону. Поэтому перед автоматизацией полезно выполнить команду на копиях небольших документов и проверить не только наличие результата, но и количество, ориентацию, поля формы и закладки.

Установка в Windows и проверка запуска

Для Windows официальный пакет версии 2.02 поставляется как EXE-установщик. Он размещает исполняемый файл и сопутствующие компоненты локально; браузер после загрузки больше не участвует в обработке документов. В актуальной 64-разрядной Windows классическая сборка обычно устанавливается в каталог программ x86 и запускается через слой совместимости. Перед развёртыванием в организации полезно проверить цифровую подпись файла, контрольную сумму и адрес загрузки.

После установки откройте новый терминал: уже запущенное окно могло не получить обновлённое значение PATH. Выполните:

pdftk --version
pdftk --help

Если оболочка отвечает, что имя команды не найдено, найдите pdftk.exe в каталоге установки и вызовите его полным путём. Затем добавьте папку с исполняемым файлом в PATH либо используйте полный путь в сценарии. В BAT-файле путь с пробелами обязательно заключают в кавычки. Для стабильного серверного задания лучше явно указывать как путь к программе, так и абсолютные пути к входам и выходу: это устраняет зависимость от текущего каталога службы.

Установщик не добавляет визуальный просмотрщик PDF и не заменяет приложение по умолчанию для чтения документов. Проверять полученные страницы нужно отдельной программой. Не следует считать отсутствием установки то, что в меню Пуск нет большого рабочего окна: для Server нормальным признаком является успешный ответ команды.

Запуск в macOS и Linux

Исторические официальные пакеты для macOS рассчитаны на процессоры Intel и конкретные поколения системы. Пакет для Mac OS X 10.6 и более поздняя сборка, подготовленная для 10.11, нельзя автоматически считать совместимыми с современным Apple Silicon: на новых компьютерах возможны запрет запуска, зависание либо необходимость слоя Rosetta. Перед установкой на рабочую машину разумнее проверить пакет в отдельной среде и рассмотреть поддерживаемый pdftk-java, если требуется тот же синтаксис на современной Java.

В Linux имя pdftk часто предоставляется репозиторием дистрибутива, но содержимое пакета зависит от выпуска системы. В одних репозиториях находилась классическая сборка, в других переходный пакет устанавливает pdftk-java. Команда может выглядеть одинаково, однако это не доказывает, что запущена оригинальная версия 2.02. Сверяйте вывод версии, сведения менеджера пакетов и путь исполняемого файла.

Страница руководства PDFtk в терминале Linux

Для серверов важны права системной учётной записи. Процессу нужны права чтения каждого входного PDF, записи в каталог результата и, при временных операциях, доступ к системной временной папке. Ошибка файл не найден часто вызвана не отсутствием документа, а тем, что служба работает с другим текущим каталогом или не видит сетевой ресурс под интерактивными учётными данными пользователя.

Имена файлов, кавычки и текущий каталог

Наиболее частая ошибка новичка связана не с PDF, а с оболочкой. Пробел разделяет аргументы, поэтому имя Договор май.pdf без кавычек воспринимается как два разных токена. В Windows используйте двойные кавычки; в Bash они также подходят и сохраняют подстановку переменных. Одинарные кавычки Bash удобны для буквального текста, но в стандартной Командной строке Windows не выполняют ту же функцию.

pdftk "Договор май.pdf" "Приложение 1.pdf" cat output "Комплект.pdf"

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

Символы оболочки требуют особой осторожности. Звёздочка раскрывается в список файлов до запуска программы в Unix-подобной системе, а порядок полученного списка обычно лексикографический. Файлы 1.pdf, 2.pdf и 10.pdf могут расположиться не так, как ожидает человек. Надёжнее использовать нумерацию с ведущими нулями или сформировать список явно. Амперсанд, скобки, знак больше и некоторые другие символы в Windows имеют специальное значение и нуждаются в корректном экранировании.

Объединение PDF с операцией cat

cat — центральная операция PDFtk Server. Она создаёт новый документ из выбранных страниц входов. Самый простой вариант перечисляет файлы в нужном порядке:

pdftk cover.pdf contract.pdf appendix.pdf cat output package.pdf

Программа не преобразует Word, изображения или таблицы в PDF. Каждый вход должен быть PDF, а материалы других типов сначала конвертируют отдельным средством. При сборке сохраняются размеры страниц; PDFtk не приводит листы к единому формату и не масштабирует их автоматически. Поэтому комплект может содержать A4, Letter и нестандартные сканы одновременно — это допустимо по формату, но может быть неудобно при печати.

Объединение не означает визуальное наложение. Страницы добавляются последовательно. Для размещения одной PDF-страницы поверх другой применяются stamp или background. Если же нужно поставить два документа рядом на одном листе, создать сетку или несколько страниц на листе, PDFtk Server сам по себе не выполняет такую компоновку.

После объединения проверьте закладки, формы и цифровые подписи. Криптографическая подпись относится к точному набору байтов исходного документа, поэтому создание нового файла обычно не сохраняет её действительность. Интерактивные поля с одинаковыми внутренними именами в разных исходниках могут взаимодействовать неожиданно; для окончательного неизменяемого результата поля предварительно или после заполнения переводят в плоское содержимое.

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

Когда страницы берутся не целиком или чередуются, входам присваивают однобуквенные дескрипторы:

pdftk A=chapter.pdf B=appendix.pdf cat A1-5 B2 A6-end output selected.pdf

Здесь A1-5 означает первые пять страниц файла A, затем добавляется вторая страница B, после чего идут страницы A с шестой до конца. Дескриптор чувствителен к регистру и должен совпадать с обозначением в выражении страниц. Такой синтаксис избавляет от повторения длинных путей и делает сложную схему заметнее.

Диапазоны, порядок и поворот страниц

Выражение страницы может содержать одиночный номер, диапазон, ключевое слово end и направление. 1-3 добавляет первые три страницы по возрастанию, end-1 — от последней к первой. Обратный диапазон удобен для сканов, полученных устройством в перевёрнутом порядке. Нельзя указывать нулевую страницу: нумерация начинается с единицы.

Для поворота используются абсолютные направления north, east, south, west и относительные left, right, down. Абсолютное направление устанавливает итоговую ориентацию относительно севера страницы, относительное изменяет уже записанный поворот. Это различие заметно на документах, где скан или исходный редактор уже установил флаг Rotation.

pdftk scan.pdf cat 1east 2-4north 5-end output corrected.pdf

Команда создаёт новый документ, где первая страница ориентирована на восток, страницы 2–4 — на север, остальные сохраняются в заданной последовательности. PDFtk меняет структуру страницы, а не перерисовывает изображение, поэтому качество скана не ухудшается. Однако визуальный результат зависит от того, как конкретный просмотрщик интерпретирует исходные размеры и поворот.

Удаление и извлечение страниц

Отдельной команды удалить страницу не требуется: новый PDF собирают из всего, что нужно оставить. Чтобы убрать страницу 13, задают два диапазона:

pdftk input.pdf cat 1-12 14-end output without-13.pdf

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

pdftk report.pdf cat 7-18 output chapter.pdf

Если диапазон выходит за количество страниц, операция завершится ошибкой или не даст ожидаемого набора, поэтому при автоматизации сначала полезно получить NumberOfPages через dump_data. Для динамических диапазонов сценарий должен проверять, что начало не больше конца и что исключение первой или последней страницы не создаёт пустое выражение.

PDFtk Server не удаляет информацию безвозвратно из исходного файла. Даже если новый документ не содержит исключённой страницы, старый PDF остаётся на диске. Для конфиденциальной очистки нужно управлять жизненным циклом исходника и помнить о резервных копиях, временных файлах и журналах приложения.

Разделение документа и режим burst

burst разбивает входной PDF на одностраничные файлы и создаёт текстовый файл с данными документа. Это удобно, когда каждый лист нужно передать в отдельную систему или затем собрать в другой последовательности:

pdftk scans.pdf burst output page_%04d.pdf

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

Подробный вывод PDFtk при перемешивании и шифровании страниц

Режим не умеет одним параметром автоматически нарезать документ на части строго по двадцать страниц. Для такой схемы сценарий вычисляет диапазоны и многократно вызывает cat. Зато burst естественно решает задачу одна страница — один PDF. Проверяйте свободное место: суммарный объём одностраничных файлов может оказаться больше исходника из-за повторяющихся служебных объектов.

Чередование сканов с помощью shuffle

При двустороннем сканировании на одностороннем устройстве часто сначала получают все нечётные страницы, затем переворачивают стопку и сканируют чётные. shuffle берёт по одной странице из каждого указанного диапазона и чередует их. Если оба файла уже идут по возрастанию:

pdftk A=odd.pdf B=even.pdf shuffle A B output collated.pdf

Если второй проход записан в обратном порядке, используют Bend-1. Перед запуском надо понять, какой файл начинается с первой страницы и в каком направлении идёт второй. Ошибка в этом предположении даёт правдоподобный, но неправильно собранный документ, поэтому полезно проверить номера на первых трёх и последних трёх листах.

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

Пароли, шифрование и разрешения

PDFtk Server принимает пароль для зашифрованного входа через input_pw и может создать защищённый результат с владельческим и пользовательским паролями. Пользовательский пароль требуется для открытия документа; владельческий управляет ограничениями. Пример базовой защиты:

pdftk input.pdf output protected.pdf owner_pw OWNER123 user_pw OPEN123

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

Классическая версия поддерживает старые режимы шифрования PDF, включая 40- и 128-битные варианты. Это не равно современной защите AES-256 и не подходит для требований, где стандарт или политика прямо требует актуальную криптографию. Ограничения печати и копирования в PDF также зависят от добросовестности просмотрщика: они не заменяют контроль доступа к самому файлу.

Снять шифрование можно только при наличии законного пароля:

pdftk protected.pdf input_pw OPEN123 output unlocked.pdf

Если пароль содержит пробелы или символы оболочки, нужны кавычки и корректное экранирование. Неверный пароль, отсутствие владельческого права на операцию либо более новый неподдерживаемый алгоритм приводят к ошибке чтения. Не следует многократно повторять попытки в автоматическом цикле без ограничения: это маскирует причину и создаёт лишнюю нагрузку.

Разрешения в защищённом PDF

После allow перечисляют допустимые действия, например печать, изменение аннотаций или копирование. Набор терминов и смысл зависят от спецификации старой ветви PDFtk. Если не указать разрешения, программа применяет свои значения по умолчанию. Для юридически значимого процесса нужно проверять итог в нескольких просмотрщиках и не считать флаг разрешения полноценной системой предотвращения утечек.

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

Заполнение форм FDF и XFDF

PDFtk Server работает с интерактивными полями AcroForm. Сначала можно получить список внутренних имён:

pdftk form.pdf dump_data_fields_utf8 output fields.txt

Вывод внутренних полей формы PDFtk в Windows

В отчёте видны тип поля, имя, текущее значение, флаги и допустимые состояния кнопок. Видимая подпись рядом с полем не обязана совпадать с внутренним именем. Радиокнопки и флажки часто требуют точного экспортного значения, например Yes или Off, а не произвольного да.

Данные готовят в FDF или XFDF, затем применяют:

pdftk blank.pdf fill_form values.xfdf output filled.pdf

Для окончательной формы добавляют flatten. Тогда значения становятся частью отображаемой страницы, а интерактивные поля удаляются или перестают редактироваться. Это удобно для отправки заполненного заявления, но после уплощения исправить значение обычным повторным заполнением уже нельзя. Храните исходный шаблон и набор данных отдельно.

Параметр need_appearances просит просмотрщик заново сформировать внешний вид полей. Он может помочь, когда значение записано, но не видно в одном из приложений. Результат зависит от просмотрщика, шрифтов и строения формы. Для надёжной выдачи обычно проверяют заполненный файл, затем при необходимости уплощают его в среде, где внешний вид сформирован корректно.

Ограничения XFA и нестандартных форм

Динамические XFA-формы отличаются от обычного AcroForm и поддерживаются неполно. Если dump_data_fields не показывает ожидаемые поля или заполнение ничего не меняет, сначала определите тип формы. Параметр drop_xfa может удалить XFA-часть и оставить AcroForm, если он действительно присутствует, но не создаёт поля из ничего и может изменить поведение документа. Всегда работайте с копией.

Форма может использовать JavaScript, вычисляемые значения, собственные шрифты и зависимые поля. PDFtk записывает данные, но не является полноценным движком Acrobat и не исполняет весь интерактивный сценарий. Проверка должна включать открытие, печать и, при необходимости, экспорт введённых данных.

Создание FDF-заготовки

Операция generate_fdf создаёт заготовку FDF по полям формы:

pdftk form.pdf generate_fdf output template.fdf

Файл удобно использовать как карту имён и основу для программного формирования данных. Он не является копией PDF и не содержит визуальный бланк. В текстовом редакторе важно сохранить корректную кодировку и структуру FDF; случайное изменение служебных скобок или экранирования делает файл недействительным.

Для русских значений предпочтительнее UTF-8-варианты операций и XFDF, где кодировка задаётся явнее. Однако итог всё равно зависит от шрифта поля. Если шаблон не содержит глифов кириллицы или не разрешает их встроить, строка может отображаться пустыми прямоугольниками. PDFtk не подбирает и не внедряет шрифт как визуальный редактор.

Штампы и фон

background помещает страницу подготовленного PDF под содержимое входа, а stamp — поверх. Это позволяет добавить бланк, водяной знак, подпись-изображение, номер партии или служебную отметку, если они заранее превращены в PDF нужного размера.

pdftk document.pdf background letterhead.pdf output on-letterhead.pdf
pdftk document.pdf stamp approved.pdf output approved-document.pdf

Наложение фона PDFtk и просмотр результата в Linux

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

multistamp и multibackground применяют многостраничный файл по страницам. Нужно заранее определить, что произойдёт, когда число страниц основы и штампа различается. Для сложной адресной разметки удобнее сгенерировать штамп с таким же количеством страниц либо разбить процесс на диапазоны.

Метаданные, закладки и номера страниц

dump_data создаёт текстовое представление метаданных, количества страниц, закладок и некоторых параметров. UTF-8-вариант лучше подходит для кириллицы:

pdftk book.pdf dump_data_utf8 output book-info.txt

Файл можно отредактировать и вернуть через update_info_utf8. Так меняют заголовок, автора, тему, ключевые слова и дерево закладок. Важно сохранить точные имена ключей и уровни закладок. Непоследовательный уровень или страница вне диапазона может дать ошибку либо повреждённую навигацию.

Метаданные документа не равны видимому тексту первой страницы. Изменение поля Title не исправляет заголовок в макете. Также не все просмотрщики показывают одинаковый набор свойств. После обновления откройте свойства файла и панель закладок в целевом приложении.

Операция записи создаёт новый PDF, поэтому существующие цифровые подписи, идентификаторы и временные метки могут измениться. Для документов с регламентированной подписью корректный порядок обычно таков: сначала окончательная сборка и метаданные, затем подпись специализированным средством.

Вложения внутри PDF

PDF допускает хранение прикреплённых файлов. PDFtk Server умеет добавить их к документу либо к определённой странице, а также распаковать:

pdftk report.pdf attach_files data.csv notes.txt output report-with-files.pdf
pdftk report-with-files.pdf unpack_files output attachments

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

Не каждый просмотрщик заметно показывает прикреплённые файлы. Отсутствие значка скрепки в одном приложении не доказывает, что вложений нет. Для контроля используйте распаковку в тестовую папку или специализированный анализатор. При пересылке некоторые системы безопасности удаляют вложения из PDF либо блокируют файл целиком.

Сжатие, распаковка потоков и ремонт

Параметры compress и uncompress относятся прежде всего к внутренним потокам PDF. uncompress делает часть структуры удобнее для диагностики или ручного исследования, а compress возвращает сжатое представление. Это не универсальный оптимизатор изображений и не гарантирует заметного уменьшения размера.

pdftk document.pdf output readable-structure.pdf uncompress
pdftk readable-structure.pdf output recompressed.pdf compress

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

Если у PDF повреждена таблица перекрёстных ссылок или длины потоков, простая запись нового результата иногда восстанавливает структуру:

pdftk broken.pdf output repaired.pdf

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

Стандартный ввод и вывод

PDFtk умеет читать PDF из стандартного ввода и писать результат в стандартный вывод в поддерживаемых операциях. Это позволяет соединять утилиты конвейером и не создавать лишний промежуточный файл. Однако PDF — двоичный формат, поэтому оболочка и вызывающая программа должны передавать поток без текстового преобразования.

В Windows особенно опасен текстовый режим, который может менять переводы строк. В языке программирования запускайте процесс с бинарными каналами и не пытайтесь декодировать PDF как UTF-8. Диагностические сообщения отделяйте от полезного вывода: смешивание текста ошибки с двоичным PDF необратимо портит результат.

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

Пакетная обработка в BAT и PowerShell

Простейший BAT-сценарий объединяет фиксированный набор:

@echo off
set "PDFTK=C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe"
"%PDFTK%" "C:\Docs\01-cover.pdf" "C:\Docs\02-body.pdf" cat output "C:\Docs\result.pdf"
if errorlevel 1 exit /b 1

Проверка errorlevel обязательна: наличие файла ещё не означает успешную операцию, особенно если в папке остался результат предыдущего запуска. До выполнения можно удалить временный выход, а после — проверить, что создан новый непустой PDF.

PowerShell удобнее для сортировки и обработки списка. Файлы лучше передавать массивом аргументов, а не собирать одну строку с ручными кавычками. При тысячах входов Windows ограничивает длину командной строки; тогда объединение выполняют этапами, создавая промежуточные пакеты, либо используют инструмент с программным API.

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

Сценарии Bash и серверные задания

В Bash полезен строгий режим и массивы:

set -euo pipefail
files=("01-cover.pdf" "02-contract.pdf" "03-appendix.pdf")
pdftk "${files[@]}" cat output "package.tmp.pdf"
mv "package.tmp.pdf" "package.pdf"

Массив сохраняет границы имён с пробелами. Временное имя не позволяет потребителю подобрать частично записанный результат. Команда mv в пределах одной файловой системы обычно выполняет атомарную замену, но перед ней можно открыть PDF анализатором и проверить число страниц.

При запуске из веб-приложения никогда не вставляйте введённое пользователем имя непосредственно в командную строку оболочки. Передавайте аргументы через безопасный API запуска процесса, нормализуйте пути, запрещайте выход за рабочий каталог и ограничивайте размер/число файлов. Иначе строка может превратиться в командную инъекцию.

Системная служба должна иметь лимиты времени, памяти и диска. Повреждённый или крайне большой PDF может обрабатываться долго. По тайм-ауту процесс завершают, временные данные удаляют, а задание переводят в понятный статус, сохраняя диагностический поток без паролей и конфиденциальных путей.

Подробный режим и диагностика

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

Примеры команд PDFtk Server в окне Windows

Диагностику удобно разделять на четыре уровня: оболочка нашла программу; PDFtk открыл входы; операция завершилась с нулевым кодом; результат прошёл содержательную проверку. Если остановиться на первом или третьем уровне, можно пропустить неверный диапазон, пустой файл, потерянные поля либо неправильную ориентацию.

Типовые ошибки и способы исправления

Команда pdftk не найдена

Причина — программа не установлена, терминал открыт до изменения PATH или используется другая учётная запись. Запустите исполняемый файл полным путём, затем проверьте переменную среды в том же контексте, где работает сценарий. Не копируйте случайный pdftk.exe из неизвестной сборки в системный каталог.

Unable to find file

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

Ошибочный диапазон страниц

Убедитесь, что нумерация начинается с единицы, end относится к нужному дескриптору и диапазон не превышает число страниц. Сложную сборку разбейте на несколько команд, затем сравните промежуточные результаты.

Выходной файл уже существует или занят

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

Заполненные поля не видны

Проверьте внутренние имена и экспортные значения, попробуйте UTF-8-вариант, откройте файл в другом просмотрщике, рассмотрите need_appearances и затем flatten. Если форма XFA, возможности классического PDFtk могут быть недостаточны.

Штамп расположен неверно

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

Защищённый PDF не открывается

Уточните, какой пароль дан — пользовательский или владельческий, и какой алгоритм использован. Современные схемы шифрования могут не поддерживаться версией 2.02. Не путайте ограничение прав с обязательным паролем открытия.

На macOS процесс зависает или сообщает Bad CPU type

Историческая бинарная сборка рассчитана на Intel и старые версии системы. Проверьте архитектуру, совместимость пакета и наличие Rosetta; для современной среды рассмотрите pdftk-java, не выдавая его за оригинальный бинарник PDF Labs.

Совместимость с PDF и ограничения формата

PDFtk Server хорошо работает с обычными документами, построенными на классических структурах PDF, но версия 2.02 появилась до многих современных практик. Новый PDF может содержать алгоритм шифрования, подпись, XFA, слой, внедрённый мультимедиа-объект или особую оптимизацию, которую старая библиотека понимает не полностью. Поэтому совместимость определяют не только расширение и номер PDF в заголовке.

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

Не стоит использовать uncompress как способ вручную заменить произвольный текст. Видимый текст может быть разбит на команды позиционирования, закодирован подмножеством шрифта, сжат в объектном потоке и связан с таблицей ToUnicode. Ошибка одного байта может разрушить документ. Для содержательного редактирования нужен PDF-редактор или генерация исходного документа заново.

Производительность на больших наборах

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

Большую задачу делите на устойчивые партии. Например, сначала создайте десять промежуточных PDF по сто документов, затем объедините десять результатов. Такой подход проще перезапускать после сбоя. Он создаёт дополнительную запись на диск, поэтому временный каталог должен иметь запас места и мониторинг.

Не запускайте неограниченное число процессов параллельно. PDF-операции могут одновременно читать крупные файлы и насыщать диск, из-за чего суммарное время растёт. Очередь с небольшим фиксированным числом рабочих процессов обычно стабильнее. Для каждого задания фиксируйте продолжительность, размер входа, число страниц и код завершения.

Безопасность локальной обработки

Преимущество локальной программы состоит в том, что документ не требуется отправлять внешнему веб-сервису. Однако безопасность всё равно зависит от компьютера, прав, временной папки и сценария. Файлы могут попасть в резервную копию, журнал, карантин антивируса или папку с широкими правами.

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

Пароли не должны находиться в открытом BAT-файле общего доступа. Если приложение вызывает PDFtk, секрет передаётся минимально доступным способом, а журнал команды маскируется. После расшифровки результат становится обычным открытым файлом и нуждается в отдельной защите доступа.

Лицензия и встраивание в продукты

Классический PDFtk Server распространяется как свободное программное обеспечение по GPL версии 2. Пользователь может применять его отдельно без платы. Но распространение PDFtk вместе с коммерческим продуктом затрагивает условия GPL; PDF Labs отдельно указывает на необходимость коммерческой лицензии для OEM и ISV, желающих включать программу в свой коммерческий пакет на иных условиях.

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

Чем PDFtk Server не является

Это не просмотрщик: команда не показывает миниатюры и не листает документ. Это не OCR: скан остаётся изображением без поискового слоя. Это не конвертер Office: DOCX, XLSX и изображения сначала преобразуют в PDF. Это не редактор контента: абзацы, картинки и векторные объекты нельзя выделить мышью. Это не современная система электронной подписи и не средство редактирования с гарантированным удалением скрытых данных.

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

Сравнение PDFtk Server с аналогами

ПрограммаЛучше подходит дляГлавное ограничение
PDFtk ServerСценариев сборки страниц, форм FDF/XFDF, штампов и метаданныхНет графического просмотра и редактирования содержимого
PDF CommanderВизуального редактирования, сборки, распознавания и повседневной работыНе предназначен как консольное ядро серверной автоматизации
qpdfНизкоуровневой проверки структуры, преобразований, шифрования и сборки PDFНе редактирует видимое содержимое и не заменяет просмотрщик
Coherent PDF Command Line ToolsШирокой автоматизации страниц, графики, закладок и служебных операцийТребует освоения большого набора консольных параметров и условий лицензии
PDFsam BasicРучного объединения, разделения, извлечения и поворота страниц в окнеБазовая редакция не заполняет формы и не редактирует текст
GhostscriptРендеринга, преобразования PostScript/PDF и уменьшения файлов через пересозданиеМожет перерабатывать содержимое и сложнее для точной работы с формами

PDFtk Server выбирают, когда требуется предсказуемая команда и особенно важны FDF/XFDF, чередование сканов, штамп или метаданные. qpdf удобнее для современной структурной диагностики и преобразований, Ghostscript — для рендеринга и оптимизации, PDFsam Basic — для простой ручной перестановки страниц. PDF Commander подходит пользователю, которому нужно видеть документ, исправлять содержимое и работать без синтаксиса терминала. Coherent PDF Command Line Tools стоит оценить при более широких требованиях к консольной автоматизации.

Практический рабочий процесс: сборка договорного комплекта

Подготовьте папку с нумерованными файлами, проверьте, что каждый открывается и не требует неизвестного пароля. Сначала соберите временный PDF:

pdftk 01-cover.pdf 02-contract.pdf 03-appendix.pdf cat output package.tmp.pdf

Затем наложите подготовленный штамп только тогда, когда его размер совпадает с целевыми страницами. Если штамп нужен не везде, извлеките диапазон, обработайте его и соберите документ заново. После сборки получите dump_data_utf8, сравните число страниц с ожидаемым и откройте результат в просмотрщике.

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

Практический рабочий процесс: массовое заполнение форм

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

После успешного теста добавьте flatten, если получатель не должен менять данные. Генерируйте уникальное имя, не вставляйте персональные данные в имя файла и не пишите их в общий журнал. Если значение не помещается, PDFtk не уменьшит шрифт разумным образом во всех формах — шаблон нужно исправить в редакторе форм.

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

Практический рабочий процесс: двусторонние сканы

Отсканируйте лицевые страницы в файл odd.pdf, затем оборотные в even.pdf. Определите порядок второго файла, просмотрев первые и последние листы. Нормализуйте поворот каждого прохода отдельной командой, если устройство записало разные ориентации.

Выполните shuffle с прямым или обратным диапазоном второго входа. Число страниц результата должно равняться сумме двух файлов. Если в оригинале нечётное число листов, последний диапазон требует проверки: один вход может закончиться раньше. После сборки просмотрите переходы 1–2, 2–3 и последние страницы, а не только обложку.

Как проверить результат автоматически

Минимальная проверка включает код завершения, наличие нового файла и ненулевой размер. Более надёжная — повторный dump_data и сравнение NumberOfPages с расчётом. Для форм можно выгрузить поля и значения, для вложений — распаковать в карантинную папку и сравнить список.

Автоматическая проверка не заменяет визуальную, если важны расположение штампа, кириллица, обрезка и печать. В конвейере полезно сохранять небольшие контрольные документы, на которых известен точный результат каждой операции. После обновления ОС или замены классической ветви на pdftk-java эти тесты запускают повторно.

Разбор полного синтаксиса команды

Удобно мысленно делить строку PDFtk на пять зон. Первая — имя исполняемого файла. Вторая — входы, каждому из которых при необходимости назначается дескриптор и пароль. Третья — операция, например cat, shuffle, fill_form или dump_data. Четвёртая — параметры самой операции. Пятая начинается с output и описывает создаваемый файл, пароль, разрешения, сжатие и подробный режим. Не все операции используют все зоны, но такой разбор помогает заметить токен, попавший не на своё место.

Входные дескрипторы состоят из одной заглавной буквы и знака равенства. Запись A=one.pdf не является переменной оболочки: её интерпретирует PDFtk. Пароль отдельного входа можно связать с тем же дескриптором, чтобы не перепутать секреты нескольких документов. Если дескрипторы не назначены, диапазоны относятся к последовательности перечисленных файлов по правилам выбранной операции.

Опция output не означает перенаправление оболочки. Это ключевое слово самой программы. Конструкция > result.pdf направляет текстовый стандартный вывод и для обычной операции может создать повреждённый файл, тогда как output result.pdf просит PDFtk корректно записать структуру PDF. Перенаправление > применяют только тогда, когда документация режима прямо предполагает текстовый поток и вы понимаете различие.

Ключевые слова обычно пишутся латиницей без дефисов и должны совпадать со справкой. Автодополнение оболочки помогает с путями, но не исправляет операцию. Если команда велика, сохраните её в сценарий с одной логической группой на строку и комментариями. В Bash продолжение оформляют обратной косой чертой, в PowerShell — обратным апострофом, однако лишний пробел после символа продолжения может разрушить конструкцию.

Страницы, MediaBox и CropBox

Внутри PDF страница имеет несколько прямоугольников: MediaBox задаёт физический носитель, CropBox — видимую область, а BleedBox, TrimBox и ArtBox используются в полиграфии. PDFtk Server при сборке сохраняет эти параметры, а не приводит листы к единому размеру. Поэтому два визуально похожих A4 могут иметь разные поля, начало координат или область обрезки.

Штамп накладывается в координатной системе страницы. Если основа и слой созданы разными программами, одинаковые цифры ширины и высоты ещё не гарантируют одинаковую видимую область. Один файл может хранить содержимое в MediaBox с узким CropBox, другой — сразу в обрезанном прямоугольнике. Итогом станет сдвиг или частичное исчезновение отметки.

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

Поворот страницы также влияет на восприятие координат. Флаг Rotation может заставить просмотрщик показать лист горизонтально, хотя внутренний прямоугольник остаётся портретным. Если штамп появляется под неожиданным углом, сначала нормализуйте поворот, затем создайте слой для итоговой ориентации.

Что происходит с закладками при сборке

Закладки PDF содержат подпись, уровень вложенности и цель, часто номер страницы. При объединении нескольких документов их поведение зависит от структуры входов и операции. Нельзя предполагать, что деревья автоматически образуют красивое общее оглавление. После сборки экспортируйте данные и проверьте, на какие страницы указывают элементы.

Для управляемого результата удобнее создать единый текстовый набор закладок после окончательного определения страниц. В нём каждый элемент получает уровень и целевую страницу уже собранного файла. Затем информация импортируется через UTF-8-операцию обновления. Такой порядок предотвращает смещение целей после последующего добавления обложки.

Уровни должны образовывать логичное дерево. Переход сразу с уровня 1 на уровень 4 без промежуточных элементов интерпретируется неоднозначно. Названия закладок не должны содержать неэкранированные управляющие последовательности. После импорта раскройте всё дерево в просмотрщике, проверьте кириллицу и несколько случайных переходов.

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

Обновление информационного словаря без лишних изменений

Экспорт dump_data_utf8 служит не только для просмотра. Его можно использовать как основу: сохранить требуемые строки, изменить значения и импортировать через update_info_utf8. Не обязательно возвращать в файл каждую строку отчёта; важнее соблюдать формат пар ключ–значение и структуру закладок.

Поля Author, Title, Subject и Keywords являются описательными. Они не подтверждают автора криптографически и легко меняются. Внутренние даты могут иметь специальное представление PDF с часовым поясом. Если автоматизация создаёт дату, используйте согласованный формат и затем проверьте, как его показывает целевое приложение.

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

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

Кодировки и русские данные

Русские пути, значения форм и закладки проходят через несколько уровней: файловую систему, оболочку, PDFtk, текстовый FDF/XFDF и шрифт PDF. Успех на одном уровне не гарантирует успех на остальных. Например, программа может открыть файл с кириллическим именем, но форма покажет квадраты из-за отсутствующего шрифта.

В Windows классическая Командная строка исторически использует кодовую страницу, отличную от UTF-8. PowerShell, Windows Terminal и способ сохранения BAT-файла тоже влияют на аргументы. Самый надёжный путь — избегать преобразования текста оболочкой: передавать аргументы из программы через системный API и использовать абсолютные пути. Если нужен BAT, протестируйте его на тех же версиях Windows и локали, где он будет работать.

Для метаданных и полей выбирайте операции с суффиксом _utf8, когда они предусмотрены. XFDF является XML и удобнее для явной кодировки, но специальные символы &, < и кавычки должны быть экранированы. Формировать XML конкатенацией строк опасно; используйте библиотеку XML.

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

Работа с одинаковыми именами полей

В одном PDF несколько визуальных элементов могут быть виджетами одного логического поля. Изменение значения такого поля обновит все связанные представления. Это нормальная модель AcroForm, но неожиданна для шаблона, где разработчик случайно скопировал поле вместе с внутренним именем.

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

Уплощение до сборки уменьшает риск конфликтов, но удаляет интерактивность. Если получатель должен продолжать заполнять форму, нужна другая стратегия: уникальные пространства имён и проверка скриптов. PDFtk не предоставляет удобного высокоуровневого переименования каждого поля с визуальным контролем.

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

Наложение печатей, подписей и номеров

Чтобы поместить изображение подписи, его сначала размещают на PDF-странице нужного формата. Прозрачный фон позволяет видеть основной текст. PDFtk накладывает готовый слой, но не знает, где находится строка Подпись и не вычисляет координаты по содержимому. Для разных шаблонов понадобятся разные слои или генерация слоя по координатам.

Нумерацию страниц можно сделать аналогично: внешняя программа создаёт многостраничный PDF с номерами в нужных местах, после чего применяется multistamp. Количество страниц слоя должно соответствовать документу. Этот подход сохраняет векторный текст, если генератор создаёт его как текст, а не изображение.

Штамп Согласовано не является электронной подписью. Он только меняет визуальное содержимое. Для подтверждения целостности и личности используется отдельная криптографическая подпись после всех преобразований. Секретный ключ нельзя передавать PDFtk, потому что программа не выполняет такой процесс.

Перед печатью проверьте, не попал ли штамп за CropBox и не перекрывает ли важное содержание. Автоматизированный процесс может сравнивать размер страниц, но окончательная визуальная проверка контрольной выборки остаётся необходимой.

Восстановление и диагностическое распаковывание

Когда просмотрщик сообщает о повреждении, сначала сохраните неизменную копию и вычислите её контрольную сумму. Затем попробуйте простую перезапись PDFtk в новый файл. Если она успешна, сравните число страниц, размеры, вложения, формы и метаданные. Ремонт структуры может отбросить объект, который программа не смогла связать.

uncompress полезен специалисту для изучения операторов и словарей, но полученный PDF всё равно не является обычным текстовым документом. Двоичные изображения могут остаться двоичными, а объектные ссылки должны сохранять целостность. Любое ручное изменение выполняется на копии и сопровождается последующей проверкой парсером.

Если PDFtk не открывает файл, попробуйте другой независимый анализатор. Разные библиотеки по-разному восстанавливают таблицу ссылок. Однако последовательное прогоняние через несколько ремонтников может удалить всё больше особенностей. Сначала определите, что важнее сохранить: визуальные страницы, формы, подписи, вложения или метаданные.

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

Выбор между классическим PDFtk и pdftk-java

Классический PDFtk Server 2.02 — продукт PDF Labs с нативными историческими сборками. pdftk-java — независимый перенос, созданный для сохранения знакомого интерфейса после проблем сборки оригинала на современных системах. Во многих командах они совместимы, но бинарная идентичность, зависимости, исправления и поддерживаемые платформы различаются.

Если существующий производственный сценарий сертифицирован именно с 2.02, замена на Java-порт должна проходить как обновление компонента: запускаются регрессионные тесты на формах, шифровании, закладках, штампах и ошибочных файлах. Одного успешного объединения двух простых PDF недостаточно.

Если приоритет — современная Linux или macOS и поддерживаемая среда исполнения, Java-порт может быть практичнее. Но в документации, инвентаризации и статье о дистрибутиве нельзя называть его официальным выпуском 2.02. Указывайте фактический пакет и сопровождающего.

На одном сервере команды могут указывать на разные реализации в зависимости от PATH, символической ссылки или контейнера. Логируйте вывод версии при старте службы и включайте его в диагностический отчёт, чтобы изменение пакета не прошло незаметно.

Контейнеры и изолированное развёртывание

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

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

Не включайте пользовательские PDF в слой образа и не записывайте их в журнал сборки. Контейнер должен быть одноразовым вычислителем, а долговременное хранение выполняет система с контролем доступа. После завершения временный том очищается.

Образ маркируют версией PDFtk и хешем установочного артефакта. Пересборка с тем же тегом, но другим бинарником ухудшает воспроизводимость. Для обновления создают новый тег и прогоняют контрольный набор.

Регрессионный набор документов

Надёжная автоматизация нуждается в небольшом наборе тестовых PDF. Включите портретные и альбомные страницы, разные размеры листа, закладки, форму с кириллицей, флажки, вложение, защищённый файл и документ с известной небольшой неисправностью. Каждый тест должен иметь ожидаемое число страниц и проверяемые свойства.

Для cat проверяйте порядок через уникальные крупные номера на страницах. Для shuffle используйте последовательности Л1, Л2… и О1, О2…. Для stamp добавьте контрольные метки по углам. Для формы сравнивайте экспортированные значения после заполнения.

Хеш всего итогового PDF не всегда подходит как единственный критерий: разные реализации могут переставлять служебные объекты, сохраняя смысл. Комбинируйте структурные проверки, извлечённые значения, рендер контрольных страниц и визуальное сравнение.

Набор запускают после изменения ОС, пакета, Java, контейнера, шаблона формы и сценария. Результаты сохраняют с версией окружения. Так можно отделить ошибку входного документа от регрессии инструмента.

Журналирование без утечки данных

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

Команду можно записывать в обезличенном виде: заменить пути внутренними номерами, а секреты — маркером. Диагностический поток хранится ограниченное время и доступен только операторам. Если PDFtk выводит пароль в verbose-режиме, подробный режим запрещают на производстве или фильтруют строку до записи.

При ошибке журнал должен отличать отказ оболочки, неверный пароль, отсутствие файла, неподдерживаемый PDF и провал содержательной проверки. Сообщение не удалось без этапа заставляет оператора повторять небезопасные действия и усложняет расследование.

Успешное задание тоже нуждается в идентификаторе результата и контрольной сумме. Это позволяет проверить, что пользователю выдан именно файл, прошедший проверку, а не оставшийся результат предыдущей попытки.

Книга рецептов для типовых операций

Собрать все PDF в явно заданном порядке:

pdftk 001.pdf 002.pdf 003.pdf cat output all.pdf

Взять первую страницу одного файла и последние две другого:

pdftk A=cover.pdf B=report.pdf cat A1 Bend-1 output extract.pdf

Заменить пятую страницу:

pdftk A=old.pdf B=new-page.pdf cat A1-4 B1 A6-end output updated.pdf

Повернуть только чётные листы требует явного перечисления диапазонов или предварительного формирования списка сценарием; PDFtk не следует заставлять угадывать условие. Для небольшого документа можно задать страницы вручную, для большого — вычислить выражение по числу страниц.

Заполнить форму и сделать значения неизменяемыми:

pdftk blank.pdf fill_form record.xfdf output final.pdf flatten

Получить закладки и метаданные в UTF-8:

pdftk final.pdf dump_data_utf8 output final-info.txt

Добавить два вложения:

pdftk final.pdf attach_files terms.txt data.csv output final-with-files.pdf

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

Когда переходить на другое решение

Переход оправдан, если организация требует AES-256, активную поддержку новых PDF, редактирование текста, OCR, редактирование скрытых данных или визуальное сравнение. Не стоит строить вокруг PDFtk сложную систему координат и рендеринга, если другой инструмент предоставляет эти функции напрямую.

Для одноразовой ручной сборки нескольких файлов пользователь без опыта терминала быстрее справится в GUI. Для библиотечной интеграции с тысячами параллельных запросов удобнее API, которое работает внутри процесса или предоставляет управляемую службу. PDFtk остаётся хорошим отдельным исполнительным модулем, но запуск процессов имеет накладные расходы и требует контроля.

Миграцию выполняют по операциям, а не по общему обещанию работает с PDF. Составьте таблицу: диапазоны, формы, штампы, метаданные, вложения, шифрование, ошибки, производительность. Для каждой функции создайте эталон и сравните результат нового решения. Особое внимание уделите формам и закладкам, которые визуально можно не заметить.

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

Ответы на частые вопросы

Можно ли открыть PDFtk Server в браузере?

Нет. Это устанавливаемая локальная утилита. Официальные страницы содержат описание и файлы, но обработка выполняется командой на устройстве пользователя или сервере.

Есть ли русский интерфейс?

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

Можно ли объединить JPG и PDF одной командой?

Нет. JPG сначала превращают в PDF внешним инструментом, после чего PDFtk собирает страницы.

Уменьшает ли compress размер скана?

Обычно нет заметно, потому что параметр не меняет разрешение и качество изображений. Для сканов нужен оптимизатор с перекодированием.

Сохраняется ли электронная подпись?

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

Можно ли заменить одну страницу?

Да, новый документ собирают из диапазона до заменяемой страницы, страницы из другого файла и оставшегося диапазона. Исходник остаётся неизменным.

Почему команда работает вручную, но не в планировщике?

У планировщика другой пользователь, текущая папка, PATH и доступ к сетевым дискам. Используйте абсолютные пути и проверьте права этой учётной записи.

Что выбрать для современной macOS?

Исторический пакет 2.02 нужно тестировать с учётом Intel-архитектуры. Для поддерживаемой современной среды часто практичнее pdftk-java, но его следует обозначать отдельным продуктом.

Итоговая оценка

PDFtk Server остаётся специализированным инструментом для тех, кто мыслит операциями над страницами и данными формы, а не визуальным редактированием. Его синтаксис компактен, команды легко повторять, а локальная обработка удобна для закрытых документов. Наиболее ценные возможности — гибкий cat, shuffle, FDF/XFDF, штампы, метаданные и вложения.

Цена этой гибкости — отсутствие предварительного просмотра, необходимость понимать оболочку и ограничения старой версии 2.02. Программу стоит применять в контролируемом сценарии: проверять дистрибутив, работать с копиями, использовать абсолютные пути, фиксировать коды завершения и визуально подтверждать результат. Для редактирования текста, OCR, современной криптографии и ручной компоновки лучше выбрать профильный редактор или более актуальный консольный инструмент.