Задача автоматической модификации PDF-файлов часто встречается в корпоративных системах, особенно в конфигурации 1С:Документооборот. Поскольку формат PDF является финальным представлением документа, его редактирование требует специализированных инструментов. Рассмотрим, как можно реализовать эту задачу, используя как платные профессиональные средства, так и бесплатные консольные утилиты.
Наиболее надежным способом программного изменения структуры PDF в среде Windows является использование COM-интерфейсов программы Adobe Acrobat Pro. Важно помнить, что обычная версия Adobe Acrobat Reader не предоставляет нужных объектов автоматизации, поэтому для работы кода потребуется установленная полная версия приложения.
Разберем процесс реализации по шагам:
Adobe Acrobat Standard или Pro на сервер или клиентскую машину, где будет выполняться код.VBScript, который через COM-объект AcroExch.App взаимодействует с библиотеками Acrobat.Рассмотрим пример кода на стороне 1С, который вызывает функции автоматизации для вставки водяного знака:
Процедура ВставитьВодяныеЗнаки(ПутьКФайлу, ТекстШтампа)
КодФункции = "Function PDFinsertWatermark(filename, text)
| Dim AcroApp, AVDoc, PDDoc, objJSO
| Set AcroApp = CreateObject(""AcroExch.App"")
| Set AVDoc = CreateObject(""AcroExch.AVDoc"")
| Call AVDoc.Open(filename, """")
| Set PDDoc = AVDoc.GetPDDoc
| Set objJSO = PDDoc.GetJSObject
| Call objJSO.addWatermarkFromText(text, objJSO.app.constants.align.top, ""Arial"", 10, objJSO.Color.black, 0, objJSO.numPages, True, True, True, objJSO.app.constants.align.right, objJSO.app.constants.align.bottom, -50, 30, False, 0.9, False, 0, 1)
| Call PDDoc.Save(1, filename)
| AVDoc.Close(1)
| AcroApp.Exit
|End Function";
мПараметры = Новый Массив;
мПараметры.Добавить(ПутьКФайлу);
мПараметры.Добавить(ТекстШтампа);
ВыполнитьСкрипт("vbscript", КодФункции, "PDFinsertWatermark", мПараметры);
КонецПроцедуры
Для выполнения подобных скриптов из 1С удобно использовать ScriptControl. Обратите внимание, что объект AcroExch.App требует корректной регистрации в системе, поэтому при возникновении ошибки Невозможно создание объекта контейнером ActiveX, в первую очередь, проверяйте наличие и лицензию установленного Adobe Acrobat.
Если бюджет не позволяет использовать лицензионный пакет от Adobe, стоит обратить внимание на консольные утилиты, которые можно запускать через ЗапуститьПриложение. Эти инструменты работают быстрее и не требуют наличия графического интерфейса пользователя.
PDFtk Server — это мощный инструмент для манипуляции PDF-документами. Суть метода заключается в создании «штампа» — отдельного PDF-файла, содержащего только нужный текст (колонтитул), который затем накладывается на исходный документ.
Пример команды для наложения текста в качестве фона:
pdftk "исходный.pdf" background "штамп.pdf" output "результат.pdf"
Команду можно сформировать в 1С через объект КоманднаяСтрока и выполнить её скрытно. Это решение является оптимальным, так как оно полностью бесплатно, легковесно и не требует сложной интеграции с COM-объектами.
После того как внешняя утилита создала модифицированный файл, его необходимо вернуть в систему 1С:
ЗапуститьПриложение с ожиданием завершения).ДвоичныеДанные.Файлы, используя методы БСП (Библиотеки стандартных подсистем) для записи новой версии присоединенного файла.УдалитьФайлы, чтобы не забивать место на сервере.Важное замечание: Мы крайне не рекомендуем пытаться конвертировать PDF в Word для редактирования, а затем обратно. PDF — это формат представления, и любая конвертация приводит к искажению структуры, шрифтов и верстки. Всегда отдавайте предпочтение «штамповке» (наложению слоев) или другим методам прямого редактирования PDF, чтобы сохранить исходный вид документа.
Использование таких инструментов, как Ghostscript или PDFtk, позволит вам автоматизировать документооборот, соблюдая при этом требования клиента по отсутствию платного ПО.