Вставка числового номера в PDF документ

17 7

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

Именно такая задача встала передо мной, реализовать вставку регистрационного номера в документ PDF формата. Для реализации этой задачи существует множество утилит работы с PDF файлами, но большинство из них платные или распространяются по лицензии GPL. Это накладывает массу ограничений на их использование, да и многие из них не имеют COM интерфейс для программной работы. В результате длительного поиска на просторах всемирной паутины, я наткнулся на интересную библиотеку Quick PDF Library Lite . Она обладает необходимым COM интерфейсом, распространяется по лицензии, которая позволят нам свободно работать с ней. Но версия Lite накладывает ограничения на возможные операции с PDF, например работа с кириллицей. Для реализации задачи, мне нужен был следующий функционал: возможность вставки номера в определенный участок документа, изменение размера и цвета вставляемого текста. Данная библиотека полностью покрывает этот минимум.

В результате работы была реализована функция, вставляющая номер в PDF документ по заданным координатам.

Функция имеет следующий синтаксис:

PutTextInPDF(
  DocumentID: Целое число;
  XPos: Целое число;
  YPos: Целое число;
  Text: Строка;
  [TextSize: Целое число = 14];
  [TextColor: Целое число = 0];
  [VersionNumber: Целое число = 0];
  [ToNewVersion: Логический = True];
  [NewComment: Строка = ''];
  [Open: Логический = False])

 

Описание параметров:

DocumentID : ИД документа

XPos:  X координата в пикселях вставляемого текста

YPos:  Y координата в пикселях вставляемого текста

Text:  Текст для вставки

TextSize:  Размер шрифта вставляемого текста

TextColor: Цвет вставляемого теста.

1 – Красный

2 – Зеленый

3 – Синий

При подстановке любого другого значения текст будет вставляться черного цвета

VersionNumber:  Версия документа, куда будет вставляться текст

ToNewVersion: Указывает импортировать документ со вставленным текстом в новую версию документа или взамен текущей версии

NewComment: Примечание к новой версии документа

Open:  Указывает открывать или нет версию документа после сохранения

Возвращаемое значение:

TRUE – вставка текста прошла успешно

FALSE – вставить текст не удалось

 

Описание:

Функция предназначена для вставки номера в PDF документ по указанным координатам. Документ выгружается на жесткий диск во временную папку. Затем, используя набор библиотек Quick PDF Library Lite, в данный документ по координатам XPos, YPos вставляется текст, указанный в параметре Text. Для преобразования берется версия документа, указанная в параметре VersionNumber. Если номер не указан, берется последняя версия документа. Преобразованный файл вносится в систему DIRECTUM. В зависимости от параметра ToNewVersion документ вноситься как новая версия документа или вместо указанной версии документа. В зависимости от параметра Open будет открыта созданная версия документа.

 

Пример использования:

EDocumentID = 115213
XPos = 450
YPos = 800
Text = '12345/12.12.12'
PutTextInPDF(EDocumentID; XPos; YPos; '12345/12.12.12'; 16; 1; 1; TRUE; 'Тест работы'; TRUE)

Результат работы функции:

 

Установка библиотеки Quick PDF Library Lite

В архиве разработки расположен установочный файл библиотеки, quick_pdf_library_lite8.exe. Для установки запустите этот файл, укажите директорию, дождитесь конца установки. В результате в указанной директории появиться папка Quick PDF Library. Папка будет содержать в себе dll файлы библиотеки, лицензионное соглашение, описание методов библиотеки, инструкцию по установке и VBS примеры использования библиотеки.

Для регистрации библиотеки необходимо в командной строке ввести:

regsvr32 «директория с установленной библиотекой\QuickPDFLite0812.dll»

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

Разработка для DIRECTUM 4.8, но должна работать и на более ранних версиях.

Архив разработки

17
Авторизуйтесь, чтобы оценить материал.
1
Михаил Тарасов

Решение нужое. Примерно месяца 2 назад искал решение подобной проблемы. Жаль толко для её исползования она должна будет стоять на всех клиентах.

Сергей Рудин

А координаты сквозные на весь документ? Как вставлять на второй и последующие листы?

Андрей Дозоров
А координаты сквозные на весь документ? Как вставлять на второй и последующие листы?
В данном решении реализована вставка только на первую страницу и координаты указываются только для первой страницы. Но у библиотеки есть методы, позволяющие менять страницу в документе, т.е. для реализации вставки на другие страницы нужно доработать функцию, добавить буквально 2 строчки. Если кого то заинтересует эта доработка, пишите, реализую. Так же после установки библиотеки у вас появится документ Quick PDF Library 8.12 Reference Guide.pdf, в нем подробно описаны все возможности для Lite и для полной версии.
Андрей Дозоров
Михаил Тарасов Решение нужое. Примерно месяца 2 назад искал решение подобной проблемы. Жаль толко для её исползования она должна будет стоять на всех клиентах

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

Подскажите может у Вас была такая проблема с использованием данного решения, при нанесении номера в некоторых документах pdf получается пустая страница с номером, т.е. в \TEMP\PutTextInPDF\test.pdf текст есть,  а в \TEMP\PutTextInPDF\testExport.pdf белый лист с номером.

Андрей Дозоров
Подскажите может у Вас была такая проблема с использованием данного решения, при нанесении номера в некоторых документах pdf получается пустая страница с номером, т.е. в \TEMP\PutTextInPDF\test.pdf текст есть,  а в \TEMP\PutTextInPDF\testExport.pdf белый лист с номером.
это интересное свойство используемой библиотеки, если в библиотеку не удалось загрузить файл для преобразования, она не выдает ни каких ошибок, она просто создает новый пустой pdf документ и работает с ним (т.е. вставляет номер в пустой pdf документ).
Решение данной проблемы: нужно посмотреть в чем особенность таких документов, мб структура документа некорректная, есть ли права на изменение документа.
Андрей Дозоров

Добрый день.

Попробуйте следующим образом

qp=Новый COMОбъект("DebenuPDFLibraryLite0913.PDFLibrary");

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

Если по этому имени не получится - можно попробовать посмотреть в реестре имя, оно будет в ветке HKEY_CLASSES_ROOT\DebenuPDF<и далее имя объекта>

Авторизуйтесь, чтобы написать комментарий