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, но должна работать и на более ранних версиях.
Решение нужое. Примерно месяца 2 назад искал решение подобной проблемы. Жаль толко для её исползования она должна будет стоять на всех клиентах.
А координаты сквозные на весь документ? Как вставлять на второй и последующие листы?
Подскажите может у Вас была такая проблема с использованием данного решения, при нанесении номера в некоторых документах pdf получается пустая страница с номером, т.е. в \TEMP\PutTextInPDF\test.pdf текст есть, а в \TEMP\PutTextInPDF\testExport.pdf белый лист с номером.
Добрый день.
Попробуйте следующим образом
qp=Новый COMОбъект("DebenuPDFLibraryLite0913.PDFLibrary");
Если Debenu ничего не поменяли, должно заработать. Обратите внимание, цифры 0913 - версия библиотеки, если вы поставили более позднюю, они будут отличаться.
Если по этому имени не получится - можно попробовать посмотреть в реестре имя, оно будет в ветке HKEY_CLASSES_ROOT\DebenuPDF<и далее имя объекта>
Авторизуйтесь, чтобы написать комментарий