LEADTOOLS PDF SDK: гайд от гика, разработка приложений для просмотра, обработки и конвертации PDF

LEADTOOLS PDF SDK — не готовый редактор, который устанавливают ради ручного исправления пары документов, а набор библиотек для разработчиков. Его задача — встроить работу с PDF в собственную программу, серверный сервис, мобильное приложение или веб-интерфейс: открыть документ, получить страницы и объекты, показать их пользователю, изменить структуру файла, заполнить формы, оптимизировать размер, создать PDF/A, поставить цифровую подпись или выполнить обработку без участия оператора. Поэтому оценивать этот продукт нужно не по удобству единственного окна, а по API, поддерживаемым платформам, демонстрационным проектам, модели лицензирования и тому, насколько точно SDK решает нужный сценарий.

Актуальная ветка документации LEADTOOLS на 4 сентября 2026 года относится к Version 23. Эта версия вышла после приобретения LEAD Technologies компанией Apryse в феврале 2024 года; текущие страницы продукта выпускаются под брендом LEADTOOLS и помечены Apryse. Внутри линейки PDF Developer Toolkit отделён от готовых пользовательских приложений: разработчик получает библиотеки, примеры исходного кода и demo-проекты, а внешний вид конечной программы, локализация, правила хранения файлов и сетевую архитектуру определяет уже его собственное приложение.

Что такое LEADTOOLS PDF SDK и чем он отличается от соседних продуктов

Официальное название коммерческого набора — LEADTOOLS PDF Developer Toolkit; на технологической странице используется название PDF SDK Libraries. Это один и тот же разработческий продукт, посвящённый PDF. Исторически LEADTOOLS создавался LEAD Technologies; после приобретения этой компании в 2024 году текущий сайт и программные материалы выпускаются как LEADTOOLS by Apryse Software Corp., которая является правообладателем продукта. Основная библиотека Leadtools.Pdf предоставляет классы для чтения, анализа и изменения PDF, а более широкая документная часть LEADTOOLS добавляет viewer-компоненты и Document Converter. Продукт не следует путать с LEADTOOLS OCR SDK: распознавание текста из сканов относится к recognition-технологиям и может комбинироваться с PDF-стеком, но само наличие PDF API не означает, что конкретный коммерческий договор автоматически включает весь набор OCR-компонентов.

Не стоит смешивать PDF SDK и с конечными web-demo LEADTOOLS. Document Viewer, Document eSignature и PDF Form Fields показывают возможный пользовательский интерфейс, однако служат демонстрацией технологий и архитектуры. В своём приложении разработчик может использовать только низкоуровневую обработку PDF без viewer, собрать собственный интерфейс или подключить Document Viewer framework. Такой подход объясняет, почему у продукта нет одного «главного окна», одинакового на Windows, Linux, Android и в браузере.

Текущая документация Version 23 охватывает .NET, iOS/macOS, Java для Android и настольных Windows/Linux/macOS, HTML5/JavaScript, C DLL и C++ Class Library. Страница PDF SDK отдельно перечисляет развёртывание на Windows, Linux, macOS, Android, iOS и Web, а среди .NET-направлений — .NET 6+, .NET Framework, .NET MAUI, Xamarin, UWP, WinForms и ASP.NET. В примерах встречаются C#, VB, XAML, C/C++, Java, Objective-C, Swift и HTML/JavaScript.

Параметр LEADTOOLS PDF SDK
Тип Коммерческий SDK и набор PDF-библиотек для встраивания в собственное ПО
Текущее семейство документации LEADTOOLS Version 23
Текущий владелец бренда Apryse; LEAD Technologies вошла в Apryse в 2024 году
Целевые платформы Windows, Linux, macOS, Android, iOS, Web
Основные API Leadtools.Pdf, PDFDocument, PDFFile и связанные классы; Document Viewer и Document Converter используются в расширенных сценариях
Основные операции Чтение и разбор PDF, просмотр, формы, страницы, закладки, вложения, JavaScript, защита, подписи, PDF/A, оптимизация, конвертация
Обязательный Acrobat Нет: PDF-функции не требуют установки Adobe Acrobat как внешней зависимости
Evaluation Доступна полнофункциональная evaluation-сборка; текущая публичная страница не фиксирует срок в днях
Публичная цена Фиксированная цена PDF Developer Toolkit не опубликована; коммерческое предложение получают через отдел продаж
Лицензии Development License для разработчиков и отдельная Deployment License для распространения redistributable-компонентов
Интернет Не является обязательным для локальной нативной обработки; web-сценарии с Document Service и облачными хранилищами добавляют сетевую зависимость

Как устроен интерфейс: библиотеки, классы и демонстрационные приложения

У SDK два уровня, которые важно разделять. Первый — программный интерфейс. PDFDocument предназначен прежде всего для чтения документа и его структуры: он открывает PDF из файла или потока, умеет работать с защищёнными документами при наличии пароля, предоставляет сведения о версии, метаданных, шифровании, страницах, объектах и изображениях. PDFFile сосредоточен на файловых преобразованиях: получении числа страниц, изменении метаданных, конвертации в PDF/A, linearization для Fast Web View, объединении и извлечении страниц, оптимизации, шифровании, закладках, аннотациях, JavaScript и других операциях записи.

Второй уровень — готовые демонстрации с исходным кодом. В комплекте PDF для .NET перечислены PDFDocumentDemo_Original.exe, PDFFileDemo_Original.exe и PdfCompDemo_Original.exe. PDF Document Demo показывает поиск, копирование и извлечение текста и изображений, работу с аннотациями, закладками, внутренними ссылками и метаданными. PDF File Demo посвящён операциям над самим файлом: оптимизации, PDF/A, linearization, слиянию и разделению, шифрованию, добавлению, замене и удалению страниц, метаданным и преобразованию PostScript в PDF. PDF Compressor Demo демонстрирует PDFCompressor и Mixed Raster Content.

Такой набор demo важен не как обязательный пользовательский интерфейс, а как исполняемая спецификация типовых сценариев. Разработчик может проследить, какие сборки загружаются, какие классы вызываются и как результат связывается с UI. Для человека, который просто хочет открыть и отредактировать документ, это избыточно: для такой задачи логичнее сначала посмотреть обычные программы для редактирования PDF, а не покупать SDK и писать приложение.

Основные функции LEADTOOLS PDF SDK

Чтение документа и извлечение структуры

PDFDocument инкапсулирует PDF и открывает его как источник данных. Конструкторы принимают имя файла или Stream; для защищённого документа есть варианты с паролем. Через DocumentProperties доступны метаданные, через IsEncrypted — признак шифрования, через FileType — тип или версия PDF, а Resolution задаёт разрешение, используемое при операциях чтения и визуализации. Класс реализует IDisposable, поэтому жизненный цикл объекта нужно завершать корректно, особенно в серверном коде с большим количеством документов.

SDK разбирает Unicode-текст, формы, изображения, шрифты, аннотации, геометрические объекты, гиперссылки, закладки, оглавление и метаданные. Это делает PDF не только картинкой для viewer, но и источником структурированных объектов для собственного поиска, индексирования, контроля полей или переноса данных. Отдельное OCR для уже существующего текстового слоя не требуется; OCR становится актуальным для сканов, где текст представлен только пикселями.

Просмотр PDF в настольном, мобильном и веб-приложении

Document Viewer framework используется там, где нужно показать документ человеку: страницы, миниатюры, закладки, масштабирование, прокрутку, аннотации и печать. В web-варианте HTML5/JavaScript фронтенд связывается с серверной документной частью. В демонстрации Document Viewer доступны загрузка локального файла, файла по URL и интеграционные варианты с хранилищами. Это уже архитектура приложения, а не свойство самого формата PDF: разработчик выбирает, будет ли документ оставаться локальным, отправляться в собственный backend или поступать из корпоративного хранилища.

Для server-only автоматизации viewer не нужен. Формы, конвертацию, оптимизацию и многие файловые операции можно выполнять без пользовательского окна. Поэтому один и тот же PDF SDK подходит и для интерактивного клиента, и для фоновой обработки очереди документов, но эти решения имеют разный набор компонентов и разные требования к deployment-лицензии.

Операции со страницами и многостраничными файлами

PDFFile умеет объединять несколько PDF, извлекать диапазоны или выбранные страницы, вставлять и заменять страницы, удалять их и менять порядок. Для объединения используется MergeFiles с массивом PDFPageRange: каждый диапазон содержит исходный файл, при необходимости пароль, первую и последнюю страницу. Для простого разделения ExtractPages сохраняет страницы в новый PDF. Это важное отличие от растрового маршрута через RasterCodecs: официальная инструкция по split прямо предупреждает, что растровый вариант превращает содержимое страницы в изображение и тем самым лишает текст исходной поисковости.

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

Формы PDF, FDF и XFA

PDF API работает с существующими формами PDF, FDF и XFA. Подтверждены типы полей Text Box, Check Box, Radio Button, List Box и Combo Box. Для AcroForms данные можно разобрать, изменить и записать обратно; в официальном .NET-примере поля получают через ParsePages с PDFParsePagesOptions.FormFields, а затем передают PDFFile.FillFormFields для сохранения нового файла. Автоматический режим не требует UI: сервер получает значения из базы или бизнес-системы и формирует заполненный PDF.

Формы — хороший пример границы между PDF SDK и готовым приложением. Библиотека предоставляет модель поля и запись значений, но правила валидации, источники данных, права сотрудника и дизайн формы остаются на стороне разработчика. Для XFA и пользовательских данных встречается содержимое, которое приложение должно интерпретировать само; поэтому сложную форму стоит проверять на реальных шаблонах организации, а не только на простом тестовом документе.

Шифрование, разрешения и цифровые подписи

PDFFile использует PDFSecurityOptions для настройки паролей и разрешений PDF, включая печать и копирование. Метод Convert может создать новый вариант файла с заданными параметрами безопасности. Для цифровой подписи предусмотрен SignDocument, который добавляет подпись из PFX-файла; PDFDocument позволяет получать сведения о встроенных подписях, а PDF-функции LEADTOOLS включают их проверку. Здесь важно различать криптографическую цифровую подпись и визуальную электронную подпись в Document Viewer: первая связана с сертификатом и проверкой целостности, вторая относится к пользовательскому eSignature-сценарию и может комбинироваться с цифровым подписанием.

PDF/A накладывает отдельное ограничение: ConvertToPDFA не применяет SecurityOptions и не создаёт зашифрованный PDF/A. Это не ошибка интерфейса, а несовместимость цели архивного стандарта с шифрованием в данной операции. Если регламент требует PDF/A, контроль доступа нужно проектировать на уровне хранилища и приложения, а не ожидать от ConvertToPDFA одновременно архивного соответствия и пароля на документ.

Закладки, ссылки, аннотации, вложения и PDF JavaScript

Библиотеки извлекают, создают, обновляют и удаляют закладки, работают с внутренними ссылками и аннотациями. Метод WriteBookmarks добавляет структуру закладок в выходной файл; при полной замене старой структуры нужно учитывать поведение ClearBookmarks: он удаляет не только закладки, но и внутренние ссылки. Этот побочный эффект особенно важен для технической документации и отчётов, где оглавление и переходы по документу являются частью навигации.

PDF Portfolio и обычные PDF с attachments можно открывать и разбирать: API получает metadata portfolio и извлекает вложенные файлы. Для PDF JavaScript доступны извлечение, запись, замена и удаление существующих действий. Наличие таких объектов не означает, что их следует безусловно исполнять. Для файлов из недоверенных источников безопаснее рассматривать JavaScript и вложения как входные данные, валидировать типы и сохранять их только в контролируемую область.

Оптимизация, сжатие и подготовка для Web

PDFFile.Optimize записывает оптимизированный документ в новый файл, а PDFOptimizerOptions задаёт стратегию оптимизатора. В PDF-направлении LEADTOOLS отдельно продвигает обработку image-based и text-searchable PDF: для изображений используется MRC-сегментация и компрессия, для текстовых документов анализируются характеристики файла, которые позволяют уменьшить объём. Это тот случай, где слово AI относится к анализу и оптимизации документа, а не к генерации текста или чат-ассистенту.

Численных обещаний по степени сжатия без конкретного набора документов давать нельзя: результат зависит от изображений, шрифтов, уже применённой компрессии и настроек. В приложении разумно сравнивать размер исходника и результата и отдельно проверять читаемость изображений, поиск текста и открытие файла. Для передачи через сеть есть Linearize, создающий PDF, оптимизированный для Fast Web View; это другая задача, чем максимальное уменьшение размера.

PDF/A, PostScript и Document Converter

ConvertToPDFA переводит связанный с PDFFile документ в PDF/A и пишет результат в отдельный файл. Для PostScript предусмотрено distill-преобразование в PDF. Более широкий Document Converter API выполняет конвертацию между PDF и PDF/A, офисными документами, изображениями, HTML, EMF и SVG; продуктовая страница говорит более чем о 165 поддерживаемых типах. Эту цифру корректно относить именно к Document Converter и общему LEADTOOLS document stack, а не к одному классу PDFFile.

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

Задача → инструмент → результат → что проверить

Задача Инструмент Результат Контроль
Получить сведения о PDF PDFDocument, DocumentProperties, IsEncrypted, FileType Структурированные свойства документа без изменения исходника Число страниц, версия, метаданные, состояние шифрования
Разделить документ PDFFile.ExtractPages Новый PDF с выбранным диапазоном или набором страниц Число страниц и сохранение текстового слоя
Объединить файлы PDFFile.MergeFiles и PDFPageRange Один PDF из заданных диапазонов нескольких источников Порядок, границы диапазонов, пароли защищённых источников
Заполнить форму PDFDocument.ParsePages и PDFFile.FillFormFields Новый PDF с записанными значениями полей Идентификаторы полей, типы, сохранённые значения
Подготовить архивный файл PDFFile.ConvertToPDFA PDF/A IsPdfA и отсутствие ожидания шифрования результата
Уменьшить размер PDFOptimizerOptions и PDFFile.Optimize Оптимизированная копия Размер, визуальное качество, поиск текста и открываемость
Подписать документ PDFFile.SignDocument и PFX-сертификат PDF с цифровой подписью Наличие подписи и успешная верификация в целевой цепочке доверия
Создать Fast Web View PDFFile.Linearize Linearized PDF IsLinearized и корректное открытие результата
Извлечь вложения API portfolio/embedded files Файлы, вложенные в PDF или Portfolio Количество вложений, имена и политика безопасного хранения
Сделать веб-viewer Document Viewer framework и Document Service Интерактивный интерфейс просмотра Доступность backend-сервиса, загрузка страниц, thumbnails, bookmarks

Карта форматов и совместимости

Формат или объект Что делает LEADTOOLS Редактируемость и потери Когда применять
PDF Читает, визуализирует, разбирает структуру, изменяет страницы и свойства, защищает, подписывает PDFFile-операции сохраняют PDF-модель; конкретные изменения зависят от выбранного метода Основной формат для документооборота
PDF/A Создаёт через ConvertToPDFA и проверяет признак IsPdfA Архивный результат не создаётся зашифрованным через ConvertToPDFA Долговременное хранение и регламентированные архивы
PostScript Distill в PDF Результатом становится PDF, а не редактируемый исходный PS Печатные и legacy-конвейеры
SVG PDFDocument может представить страницу как SVG; Document Converter работает с SVG в конвертациях SVG — представление страницы, а не полный эквивалент всех PDF-функций Встраивание и визуализация в приложении
FDF Работа с данными PDF-форм Переносит данные полей, а не весь внешний вид документа Обмен значениями AcroForms
XFA Чтение и обработка данных форм в поддерживаемых сценариях Сложные пользовательские данные требуют интерпретации приложением Корпоративные PDF-формы, где XFA уже используется
Office, HTML, изображения, EMF и другие типы Конвертируются в составе Document Converter Точность зависит от исходного формата и выбранного преобразования; это более широкий document stack, а не только Leadtools.Pdf Нормализация разнородных документов в PDF и обратные преобразования
PDF Portfolio и attachments Читает portfolio schema/metadata и извлекает вложенные файлы Извлечённое вложение остаётся самостоятельным файлом своего типа Пакеты документов и контейнерные PDF

Платформы, требования и зависимость от интернета

По текущему перечню PDF SDK развёртывается на Windows, Linux, macOS, Android, iOS и Web. Для .NET официально перечислены .NET 6+, .NET Framework, .NET MAUI, Xamarin, UWP, WinForms и ASP.NET; рядом существуют C++ Class Library, Java и нативные мобильные интерфейсы. Это не означает, что один бинарный файл копируется на все системы: LEADTOOLS поставляет платформенные managed- и native-компоненты, поэтому target runtime и архитектура должны совпадать со сборкой приложения.

Официальный стартовый tutorial для C# использует Visual Studio 2022 и .NET 6 как воспроизводимый пример, но Visual Studio не является единственным возможным редактором исходного кода для всей линейки. В .NET-проекте зависимости можно подключить пакетами NuGet или локальными сборками из каталога LEADTOOLS23. Для .NET 6+ отдельно задаётся Platform.LibraryPath к каталогу нативных библиотек; на Windows в примере это Bin\CDLL\x64. Если проект разрабатывается именно в среде Microsoft, полезно заранее разобраться с установкой и устройством Visual Studio, поскольку ошибки платформы и ссылок на сборки возникают ещё до обработки первого PDF.

Требования к памяти и процессору нельзя свести к одной цифре для SDK: нагрузка зависит от числа страниц, изображения внутри PDF, выбранной операции, количества параллельных задач и target-платформы. Страница продукта говорит о multi-threaded PDF functionality, однако не публикует универсальных измерений скорости для конкретного серверного железа. Для production-сервиса правильный способ оценки — прогнать собственный набор документов, фиксируя время, память, размеры файлов и качество результата, а не переносить чужой benchmark на другой тип PDF.

Нативный PDF API не является SaaS, которому обязательно нужно отправлять документ в облако. Локальный файл может обрабатываться библиотеками внутри процесса приложения. Сетевая граница появляется там, где разработчик сам выбирает web-архитектуру: HTML5/JavaScript Document Viewer использует Document Service для серверных операций, а интеграции с URL, SharePoint, Google Drive или OneDrive требуют соответствующего соединения. Поэтому вопрос «работает ли без интернета» решается по архитектуре конкретного продукта на LEADTOOLS, а не одним переключателем SDK.

Безопасность и приватность при работе с PDF

LEADTOOLS поддерживает парольное шифрование PDF и permissions, которыми приложение ограничивает печать, копирование и отдельные способы изменения документа. Для цифровой подписи используется сертификат в PFX, а API умеет получать информацию о подписях и проверять их. Эти механизмы полезны только вместе с корректным управлением секретами: пароль документа и пароль контейнера PFX нельзя хранить в исходном коде, журнале ошибок или клиентском JavaScript.

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

Для приватности принципиально, где именно расположен Document Service и куда приложение сохраняет временные файлы. Локальный desktop-процесс и сервер в собственной инфраструктуре дают одну модель данных; подключение облачного диска или hosted deployment — другую. Продуктовая лицензия допускает разные deployment-модели, включая серверы, hosted services и cloud, однако выбор такого режима не превращает SDK автоматически в облачный сервис Apryse. В публичном интерфейсе собственного приложения нужно отдельно объяснять пользователю, передаются ли документы по сети и где они хранятся.

Лицензирование, цена и evaluation-режим

У LEADTOOLS нет публичной фиксированной цены PDF Developer Toolkit на текущей странице заказа. Коммерческое предложение формируется через отдел продаж. Модель состоит как минимум из двух частей. Development License покрывает использование SDK при разработке: для каждого разработчика, который устанавливает и использует LEADTOOLS, требуется development seat; для команд доступны дополнительные варианты лицензирования. Deployment License нужна для копирования и распространения интеллектуальной собственности Apryse вместе с готовым приложением.

Deployment считается отдельно от рабочего места разработчика. В лицензировании перечислены stand-alone desktops, named users, mobile device users, concurrent users, servers, hosted services и cloud deployment. Это означает, что цена проекта зависит не только от числа программистов, но и от того, куда и в каком масштабе будет поставляться продукт. Для внутреннего desktop-инструмента, публичного SaaS и мобильного приложения схема может различаться.

Development License включает бесплатную техническую поддержку по email. Annual maintenance рекомендована, но обозначена как необязательная. Для evaluation доступна полнофункциональная сборка, в которую включены технологии разных продуктов LEADTOOLS, в том числе PDF. Это удобно для прототипирования, но evaluation-комплект шире, чем коммерческий PDF SKU: факт доступности OCR, Document Converter и других модулей в тестовой загрузке нельзя автоматически переносить на будущий договор. Перед закупкой нужно сопоставить использованные namespaces и redistributables с коммерческим составом.

Текущая страница evaluation не публикует фиксированную продолжительность пробного периода в днях, поэтому при планировании нельзя опираться на старые условия из архивных версий. Лицензия активируется файлами LEADTOOLS.LIC и LEADTOOLS.LIC.KEY; tutorial рекомендует вызвать RasterSupport.SetLicense до любых методов SDK и проверять RasterSupport.KernelExpired. После покупки evaluation-лицензию заменяют production-лицензией, а в deployment должны присутствовать разрешённые redistributable-компоненты.

Скрытая стоимость владения

Главная скрытая статья расходов — не сама интеграция PDFFile, а граница между разработкой и распространением. Команде требуется нужное количество development seats, а затем отдельная deployment-схема под конечную архитектуру. Если проект сначала создаётся как внутренний desktop-инструмент, а затем превращается в hosted service, лицензионную модель следует пересматривать до публикации сервиса, а не после масштабирования.

Вторая статья — соседние технологии. Evaluation включает PDF, OCR, Document Converter, viewer, recognition и другие модули, поэтому прототип легко начинает использовать функции за пределами минимального PDF-набора. Для production это нужно инвентаризировать: классы конвертации Office, OCR сканов, Document Analyzer, Document Compare или Virtual Printer относятся к более широкому стеку. Коммерческий состав и deployment для такого решения следует согласовывать исходя из реально используемых компонентов.

Третья статья — инфраструктура. Локальный PDFFile-конвейер может работать без отдельного web-backend, но HTML5 Document Viewer переносит часть обработки в Document Service. Тогда появляются серверные ресурсы, мониторинг, временное хранение, TLS, резервирование и обновление backend-компонентов. Это не плата за «облако LEADTOOLS» как обязательный сервис, а стоимость выбранной архитектуры собственного продукта.

Наконец, maintenance формально не обязательна, но проекту с долгим сроком жизни всё равно нужен процесс обновления зависимостей и проверки совместимости. Даже при сохранении одной версии SDK команда оплачивает своё тестирование на новых версиях ОС, .NET и браузеров. Для коммерческого продукта стоимость владения корректнее считать по всей цепочке development → deployment → инфраструктура → сопровождение, а не сравнивать только исходную цену библиотеки.

Как пользоваться программой — советы гика

У LEADTOOLS PDF SDK нет единственной панели с кнопками для всех функций, поэтому ниже названия «элементов интерфейса» означают либо реальные команды Visual Studio, либо конкретные классы, свойства и методы API. Все операции выполняются над копиями документов: исходный PDF лучше сохранять неизменным до тех пор, пока выходной файл не прошёл проверку.

Подготовить C# .NET 6 проект и активировать LEADTOOLS

Цель. Получить минимальный проект, в котором PDF API вызывается с корректно установленной runtime-лицензией.

Подготовка. Нужны установленный LEADTOOLS Version 23 или доступ к соответствующим NuGet-пакетам, файлы LEADTOOLS.LIC и LEADTOOLS.LIC.KEY и среда .NET 6+. Официальный пример использует Visual Studio 2022.

  1. В Visual Studio выберите Create a new project, затем шаблон Console App и framework .NET 6.0.
  2. Откройте Solution Explorer, вызовите Manage NuGet Packages…, перейдите в Browse и найдите пакет LEADTOOLS, необходимый сценарию PDF. Для низкоуровневых PDF-операций используется Leadtools.Pdf.
  3. При локальном подключении сборок используйте managed-библиотеки из каталога LEADTOOLS23\Bin\net.
  4. Для .NET 6+ до первого вызова PDF задайте Platform.LibraryPath на каталог нативных библиотек нужной архитектуры. В Windows x64 tutorial использует LEADTOOLS23\Bin\CDLL\x64.
  5. До любого вызова SDK выполните RasterSupport.SetLicense, передав путь к LEADTOOLS.LIC и содержимое LEADTOOLS.LIC.KEY.
  6. Сразу после установки лицензии проверьте RasterSupport.KernelExpired. Если свойство сообщает об истёкшем runtime, дальнейшую обработку не запускайте.

Важные параметры. Архитектура native-библиотек должна совпадать с процессом приложения. Путь к license-файлам лучше получать из защищённой конфигурации deployment, а не вшивать секретные данные в исходник.

Проверка результата. Проект запускается без ошибки загрузки native DLL, KernelExpired не сигнализирует об истёкшей лицензии, после чего можно создать PDFDocument или PDFFile.

Типичная ошибка. SetLicense вызывается после первого обращения к SDK либо Platform.LibraryPath указывает на каталог другой архитектуры. В результате проблема выглядит как ошибка PDF, хотя документ ещё не обрабатывался.

Безопасный откат. Удалите добавленные пакеты или ссылки, восстановите исходный файл проекта из системы контроля версий и верните прежнюю конфигурацию runtime; PDF-файлы на этом этапе не изменяются.

Открыть PDF и получить его свойства без изменения файла

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

Подготовка. Лицензия уже установлена. Есть путь к PDF; для защищённого документа известен пароль чтения.

  1. Создайте PDFDocument через конструктор PDFDocument(string fileName). Для защищённого файла используйте перегрузку PDFDocument(string fileName, string password).
  2. Считайте IsEncrypted и FileType, затем DocumentProperties для нужных метаданных.
  3. Обратитесь к коллекции Pages только после успешного открытия. Для визуального представления отдельной страницы доступны GetThumbnail и GetPageSvg.
  4. Завершите работу с PDFDocument через Dispose или конструкцию языка, которая гарантирует IDisposable.

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

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

Типичная ошибка. Защищённый PDF открывают конструктором без пароля и трактуют исключение как повреждение файла.

Безопасный откат. Закройте PDFDocument и прекратите обработку. Поскольку запись не выполнялась, восстанавливать исходник не требуется.

Извлечь страницы в новый PDF без растеризации

Цель. Получить часть документа и сохранить исходный PDF-контент страниц, включая поисковый текст.

Подготовка. Определите номера страниц начиная с 1 и отдельный путь для выходного файла.

  1. Создайте PDFFile, передав имя исходного PDF; для защищённого файла используйте конструктор с паролем или свойство Password.
  2. Для непрерывного диапазона вызовите ExtractPages(firstPageNumber, lastPageNumber, destinationFileName).
  3. Для разрозненных страниц сформируйте массив int, где каждый номер не меньше 1, и вызовите ExtractPages(pages, destinationFileName).
  4. Не передавайте имя исходника как destinationFileName при первой проверке операции: результат должен записаться в отдельную копию.

Важные параметры. Номера страниц однобазовые. Массив pages не должен быть null. Если destinationFileName равен null, метод может обновлять файл, связанный с PDFFile, поэтому для безопасного workflow явно задавайте новый путь.

Проверка результата. Откройте выход через новый PDFFile и сравните GetPageCount с количеством выбранных страниц. В viewer убедитесь, что текст, который был searchable в исходнике, остаётся selectable/searchable.

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

Безопасный откат. Удалите только созданный output и повторите ExtractPages. Исходный файл не требуется перезаписывать.

Объединить диапазоны из нескольких PDF

Цель. Собрать один документ из полных файлов или отдельных диапазонов, не выполняя предварительную растеризацию.

Подготовка. Проверьте порядок источников и пароли для защищённых PDF. Создайте отдельный destinationFileName.

  1. Создайте PDFFile для основного источника.
  2. Сформируйте массив PDFPageRange. В каждом элементе задайте FirstPageNumber и LastPageNumber.
  3. Для диапазона из другого документа задайте FileName; если он защищён, задайте Password. Если FileName не задан, диапазон относится к файлу текущего PDFFile.
  4. Передайте массив в MergeFiles(PDFPageRange[] srcPages, string destinationFileName).
  5. После создания результата откройте его новым PDFFile и получите GetPageCount.

Важные параметры. MergeFiles принимает диапазоны в том порядке, в котором они должны попасть в результат. SecurityOptions текущего PDFFile влияет на шифрование выходного файла: null означает незашифрованный результат.

Проверка результата. Сумма выбранных диапазонов совпадает с GetPageCount, а первые и последние страницы каждого блока стоят в ожидаемом порядке.

Типичная ошибка. Пароль задают для текущего PDFFile, хотя защищён именно внешний элемент PDFPageRange. Для внешнего источника пароль хранится в соответствующем диапазоне.

Безопасный откат. Удалите собранную копию и исправьте массив диапазонов. Исходные PDF при MergeFiles остаются самостоятельными файлами.

Разобрать и сохранить поля PDF-формы

Цель. Программно заполнить AcroForms без ручного ввода через viewer.

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

  1. Создайте PDFDocument для исходного файла.
  2. Вызовите ParsePages с флагом PDFParsePagesOptions.FormFields, начальной страницей 1 и значением -1 для обработки до конца документа.
  3. Пройдите страницы и получите их FormFields. Сопоставьте поля с вашими данными по идентификаторам, а не по визуальному положению на странице.
  4. Измените значения объектов PDFFormField в рабочей коллекции.
  5. Создайте PDFFile для исходной формы и вызовите FillFormFields с изменёнными полями и путём нового output.

Важные параметры. Поддерживаются Text Box, Check Box, Radio Button, List Box и Combo Box. Для XFA и нестандартных пользовательских данных приложение должно учитывать собственную структуру данных формы.

Проверка результата. Повторно разберите выходной PDF и сравните значения нужных FormFields с данными, которые должны были сохраниться.

Типичная ошибка. Значения меняют в памяти после ParsePages, но не передают в FillFormFields; исходный PDF от этого сам не изменяется.

Безопасный откат. Удалите выходной файл, исправьте сопоставление полей и заново выполните запись из неизменённого шаблона.

Конвертировать PDF в PDF/A

Цель. Получить архивный вариант PDF/A средствами PDFFile.

Подготовка. Используйте отдельный путь для результата и заранее определите, что шифрование output не требуется.

  1. Создайте PDFFile, связанный с исходным PDF.
  2. Вызовите ConvertToPDFA(destinationFileName). Для этой операции предварительный Load не требуется.
  3. Не пытайтесь одновременно задавать SecurityOptions для шифрования результата: ConvertToPDFA их не применяет.
  4. После записи вызовите PDFFile.IsPdfA для нового файла.

Важные параметры. CompatibilityLevel отдельно не задаёт версию PDF/A в этой операции; архивный режим определяет сама конвертация.

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

Типичная ошибка. Команда ожидает получить одновременно PDF/A и парольное шифрование через SecurityOptions. В этом методе зашифрованный PDF/A не создаётся.

Безопасный откат. Сохраните исходный PDF как рабочую версию, удалите неудачную архивную копию и пересмотрите модель доступа на уровне хранилища.

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

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

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

  1. Создайте PDFFile для входного документа.
  2. Создайте PDFOptimizerOptions и задайте требуемую стратегию оптимизации; затем присвойте объект свойству OptimizerOptions.
  3. Вызовите Optimize(destinationFileName), где destinationFileName указывает на отдельную копию.
  4. Сравните размеры исходника и результата, затем откройте выход и проверьте страницы, изображения и поиск по тексту.

Важные параметры. OptimizerOptions определяет баланс качества и размера. MRC особенно относится к image-based документам, а text-searchable PDF оптимизируется по структуре. Никакой фиксированный процент уменьшения не гарантируется для всех файлов.

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

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

Безопасный откат. Не заменяйте master-файл. Удалите неудачный output и повторите Optimize с более консервативными параметрами.

Зашифровать PDF и задать разрешения

Цель. Создать защищённую копию PDF с паролями и permissions.

Подготовка. Определите user password, owner password и разрешения согласно политике приложения. Не храните их в репозитории исходного кода.

  1. Создайте PDFFile для исходного документа.
  2. Создайте PDFSecurityOptions и задайте UserPassword и OwnerPassword.
  3. Настройте разрешения, например PrintEnabled и HighQualityPrintEnabled, а также выбранный EncryptionMode.
  4. Присвойте настройки свойству SecurityOptions PDFFile.
  5. Вызовите Convert для создания нового защищённого PDF, указав диапазон страниц и destinationFileName согласно используемой перегрузке.

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

Проверка результата. PDFFile.IsEncrypted для output показывает шифрование; открытие без user password отклоняется, а с правильным паролем проходит.

Типичная ошибка. Защищённый output создают поверх единственной копии исходника и затем обнаруживают неверно заданный пароль.

Безопасный откат. Держите незашифрованный master в защищённом рабочем хранилище, удалите ошибочный output и создайте его заново с корректными параметрами.

Добавить цифровую подпись из PFX

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

Подготовка. Нужен действующий PFX-файл, пароль к нему и политика доверия, по которой потребители будут проверять сертификат.

  1. Подготовьте отдельный выходной PDF, если используемая перегрузка SignDocument создаёт новый файл.
  2. Вызовите PDFFile.SignDocument, передав PDF, PFX и пароль в соответствии с выбранной перегрузкой. API содержит перегрузки для файлов и Stream.
  3. После подписания откройте результат через PDFDocument и получите сведения о встроенной подписи.
  4. Проверьте подпись тем же способом, который будет использовать production-приложение или внешняя система контроля.

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

Проверка результата. В PDF присутствует цифровая подпись, её информация читается, а проверка целостности проходит до изменения документа.

Типичная ошибка. Визуальную картинку подписи принимают за цифровую подпись. Криптографическая операция SignDocument использует PFX и не сводится к изображению росчерка.

Безопасный откат. Не перезаписывайте подписанный master при эксперименте. При ошибке удалите output, устраните проблему с сертификатом и подпишите свежую копию исходного PDF.

Открыть локальный PDF в HTML5 Document Viewer и экспортировать результат

Цель. Проверить интерактивный web-сценарий LEADTOOLS с реальным Document Service, а не считать demo обычной статической страницей.

Подготовка. Нужен установленный LEADTOOLS23, license-файлы в каталоге Support\Common\License, Document Viewer Demo из Examples\Viewers\JS\DocumentViewerDemo и запущенный Document Service.

  1. Запустите backend Document Service, соответствующий вашей конфигурации.
  2. Откройте Document Viewer Demo и дождитесь загрузки стартового документа без сообщения Cannot reach the LEADTOOLS Document Service.
  3. Откройте меню File и выберите Open local file, затем укажите тестовый PDF.
  4. Проверьте отображение страниц, миниатюр и закладок, если они есть в документе.
  5. Для сохранения в другом формате откройте File, выберите Export и задайте доступные параметры экспорта.

Важные параметры. В demo также существуют Open from URL, Open from cache и Open from cloud storage. Эти варианты добавляют соответствующую сетевую или серверную зависимость и не нужны для проверки локальной загрузки.

Проверка результата. Локальный PDF отображается через viewer, а export создаёт ожидаемый файл без ошибок backend.

Типичная ошибка. Frontend запускают без Document Service и начинают отлаживать сам PDF. При сообщении о недоступном сервисе сначала проверяют backend и его URL.

Безопасный откат. Закройте demo и удалите только экспортированную копию. Исходный PDF остаётся отдельным входным файлом.

Извлечь вложенные файлы из PDF или PDF Portfolio

Цель. Получить attachments как отдельные бинарные файлы, сохранив PDF-контейнер неизменным.

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

  1. Создайте PDFDocument и вызовите ParseDocumentStructure с PDFParseDocumentStructureOptions.EmbeddedFiles.
  2. Получите коллекцию EmbeddedFiles. Для каждого элемента используйте FileNumber как уникальный однобазовый идентификатор; одно имя FileName не гарантирует уникальность.
  3. Для нужного элемента вызовите PDFFile.ExtractEmbeddedFile, передав исходный PDF, пароль или null, FileNumber и отдельный output file либо output Stream.
  4. Не формируйте путь сохранения напрямую из непроверенного FileName вложения: назначьте безопасное имя в разрешённом каталоге приложения.

Важные параметры. FileNumber начинается с 1 и используется именно для идентификации вложения при ExtractEmbeddedFile. Для encrypted PDF передаётся password; для незашифрованного — null.

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

Типичная ошибка. Код считает FileName уникальным и перезаписывает одно вложение другим, если имена совпали.

Безопасный откат. Удалите каталог извлечённых копий и повторите операцию с уникальными именами. Исходный PDF не меняется.

Сквозной сценарий: от нового проекта до проверенного output.pdf

Цель. Собрать минимальный воспроизводимый workflow, который показывает реальную схему SDK: лицензия → входной PDF → безопасная операция → контроль результата.

Подготовка. Возьмите небольшой текстовый PDF, сохраните его как input.pdf и создайте пустой каталог output.

  1. Создайте Console App на .NET 6, подключите Leadtools.Pdf и необходимые базовые зависимости.
  2. Установите Platform.LibraryPath на runtime вашей архитектуры и вызовите RasterSupport.SetLicense до PDF API.
  3. Откройте input.pdf через PDFDocument, получите количество страниц и IsEncrypted. Если документ требует пароль, остановите pipeline до получения корректных учётных данных.
  4. Закройте PDFDocument после чтения и создайте PDFFile для input.pdf.
  5. Назначьте PDFOptimizerOptions и выполните Optimize в output\output.pdf. Исходный input.pdf не изменяйте.
  6. Откройте output\output.pdf новым PDFDocument, сравните количество страниц с input.pdf и проверьте чтение метаданных.
  7. Откройте оба файла в целевом viewer и проверьте текстовый поиск, изображения и визуально критичные страницы.
  8. Только после этих проверок передавайте output.pdf дальше в систему или заменяйте производную копию в storage.

Важные параметры. В этом маршруте оптимизация выбрана как безопасно демонстрируемая операция, потому что пишет отдельный файл. В реальном проекте на её месте может стоять ExtractPages, MergeFiles, ConvertToPDFA или FillFormFields.

Проверка результата. Pipeline завершается без license/runtime ошибок, output существует, читается PDFDocument, число страниц ожидаемо, а функциональные свойства документа не потеряны.

Типичная ошибка. Проверку считают завершённой после появления файла на диске. Валидный workflow дополнительно открывает output средствами SDK и проверяет свойства, важные бизнес-сценарию.

Безопасный откат. Удалите каталог output и повторите pipeline с input.pdf. Master не должен зависеть от результата предыдущей попытки.

Плюсы и минусы

Плюсы

  • Широкая платформенная матрица. Один продуктовый стек охватывает Windows, Linux, macOS, Android, iOS и Web, поэтому PDF-логику можно использовать в разных частях системы без обязательной привязки к одной настольной ОС.
  • Разделение чтения и файловых преобразований. PDFDocument удобен для инспекции и парсинга, а PDFFile — для операций записи, страниц, оптимизации, защиты и PDF/A; это делает API понятнее при построении backend-конвейера.
  • Работа без Adobe Acrobat. Приложению не требуется устанавливать Acrobat как внешнюю зависимость для базовых PDF-функций LEADTOOLS.
  • Многостраничные операции сохраняют PDF-модель. ExtractPages и MergeFiles позволяют работать со страницами напрямую; это предпочтительнее растрового split, когда важно сохранить поисковый текст.
  • Формы доступны и интерактивно, и без UI. AcroForms можно разбирать и заполнять программно, а Document Viewer даёт основу для пользовательского интерфейса.
  • Поддержаны безопасность и архивные сценарии. В одном стеке есть шифрование, permissions, цифровые подписи, PDF/A и redaction, хотя конкретные комбинации имеют ограничения.
  • Есть демонстрации с исходным кодом. PDF Document, PDF File и PDF Compressor demos показывают реальные классы и операции, а не только маркетинговые скриншоты.
  • Локальная обработка возможна без обязательного облачного сервиса. Для desktop/server сценария PDF может оставаться внутри инфраструктуры приложения; web-backend подключается тогда, когда он нужен архитектуре.

Минусы

  • Это не готовая программа для пользователя. Чтобы получить редактор или документооборот, нужно написать собственное приложение или интегрировать viewer и backend.
  • Стоимость нельзя узнать из публичного прайса. Для PDF Developer Toolkit требуется коммерческое предложение, а deployment рассчитывается по модели распространения.
  • Лицензирование двухуровневое. Development seat не заменяет Deployment License; для SaaS, server, mobile и desktop схемы распространения оцениваются отдельно.
  • Evaluation может создать ложное ощущение состава продукта. Тестовая загрузка включает технологии нескольких продуктовых линеек, тогда как production-покупку нужно сверять по реально используемым компонентам.
  • PDF/A нельзя одновременно зашифровать через ConvertToPDFA. SecurityOptions в этой операции не применяются, поэтому контроль доступа приходится решать иначе.
  • Некоторые методы имеют важные побочные эффекты. Например, ClearBookmarks удаляет не только закладки, но и internal links, что требует отдельной проверки навигации.
  • Для web-viewer появляется серверная часть. HTML5/JavaScript Document Viewer в сервисной архитектуре зависит от корректно запущенного Document Service.
  • Нет универсальных цифр производительности. Команда должна сама тестировать скорость, память и качество на своём корпусе PDF и своём железе.

Кому подойдёт

Разработчикам корпоративного документооборота. SDK логичен, когда PDF — часть бизнес-процесса: документы приходят автоматически, разбираются, объединяются, заполняются, подписываются и уходят в архив или внешнюю систему. Здесь ценность дают API, batch-обработка и отсутствие необходимости управлять конечным desktop-приложением вручную.

Командам, которым нужны и нативные, и web-сценарии. Платформенная матрица позволяет строить серверную обработку, desktop-клиент, мобильный интерфейс и HTML5 viewer вокруг одной продуктовой экосистемы. Это особенно важно, когда PDF должен одинаково участвовать в нескольких каналах одного сервиса.

Проектам с многостраничными документами и формами. MergeFiles, ExtractPages, FillFormFields, parsing, bookmarks, attachments и цифровые подписи закрывают типовые операции над документом без перевода каждой страницы в изображение.

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

Кому не подойдёт

Пользователю, которому нужно вручную отредактировать несколько PDF. SDK требует разработки, сборки UI и лицензирования deployment. Готовый PDF-редактор будет быстрее и дешевле по трудозатратам.

Небольшому проекту с одной простой операцией и жёстким бюджетом. Если приложение только создаёт PDF из текста в Java или .NET и команда готова соблюдать условия open-source лицензии, специализированная библиотека с открытой моделью может быть проще. LEADTOOLS оправдывается, когда нужен более широкий набор document/PDF функций или несколько платформ.

Команде, которой нужен прозрачный фиксированный прайс до технического прототипа. LEADTOOLS публикует структуру лицензий, но не итоговую цену PDF Developer Toolkit и deployment. Финансовое сравнение требует общения с sales и точного описания deployment.

Архитектуре без возможности поддерживать backend, если выбран web-viewer. Сам PDF SDK не заставляет использовать сервер, но Document Viewer в сервисном web-сценарии добавляет backend. Если допустим только полностью автономный браузерный компонент, архитектуру нужно сравнить с альтернативами отдельно.

Сравнение с другими аналогами

Ниже сравниваются именно developer SDK и библиотеки, а не пользовательские PDF-редакторы. Критерии одинаковы: основная задача, платформы, порог освоения, форматы и PDF-функции, автоматизация, модель оплаты, ограничения и сценарий, в котором альтернатива выглядит логичнее.

Продукт Задача Платформы Порог освоения Форматы и функции Автоматизация Оплата Ограничения Подходящий сценарий
LEADTOOLS PDF SDK PDF processing плюс интеграция с более широким document stack Windows, Linux, macOS, Android, iOS, Web Средний или высокий: API, native runtime, лицензирование, при Web ещё Document Service PDF, PDF/A, PS; формы, страницы, подписи, security, attachments; широкая конвертация через Document Converter Да, через API и server workflows; поддерживается multi-threaded PDF functionality Коммерческая development + deployment, цена по обращению Нет публичного фиксированного прайса; evaluation шире коммерческого SKU Кроссплатформенный корпоративный продукт с просмотром и обработкой документов
Foxit PDF SDK Встраиваемый PDF SDK с готовыми функциями просмотра, форм, аннотаций, security Windows, macOS, Linux, Android, iOS, Web Средний: отдельные SDK по платформам и rich API PDF rendering, forms, annotations, signatures, security и другие PDF-функции Да; подходит для enterprise, mobile и cloud приложений Коммерческая лицензия по quote; 30-дневный trial Цена также не фиксируется одной публичной суммой; нужно выбирать платформы и договор Когда важна близкая к LEADTOOLS кроссплатформенность и нужен сильный готовый PDF UI/API стек
iText Core 9 Программное создание и изменение PDF в Java и .NET Java и .NET/C# на поддерживаемых ими системах Средний: хороший fit для backend-разработчика, но меньше готового cross-platform viewer UI PDF creation/manipulation, split, merge, forms и доступ к низкоуровневой структуре PDF Да, особенно server-side и batch AGPL или коммерческая лицензия AGPL накладывает open-source обязательства; при закрытом продукте нужна коммерческая модель Java/.NET backend, где важен программный контроль PDF и подходит AGPL либо коммерческий iText
Adobe PDF Library от Datalogics Серверная и desktop PDF-обработка на движке Adobe Windows, Linux, macOS; C++, .NET/.NET Framework, Java; есть container deployment Высокий: enterprise SDK и низкоуровневый PDF-processing Создание, изменение, формы, подписи, security, PDF/A/PDF/X, optimization, rendering Да, ориентирована на automated workflows и OEM Коммерческая годовая; текущая страница показывает старт от 5999 долларов в год, итог зависит от модели Нет Android/iOS/Web как той же широкой платформенной матрицы; стоимость enterprise-уровня Когда приоритет — совместимость с PDF-движком Adobe, глубокая специфика PDF и server/desktop обработка

Foxit ближе всего по идее «один коммерческий PDF SDK на desktop, mobile и Web». iText Core сильнее отличается моделью: это Java/.NET библиотека с AGPL и commercial licensing, подходящая для code-centric backend без обязательного viewer framework. Adobe PDF Library сужает платформы до desktop/server, зато строится на core engine Adobe Acrobat и ориентируется на проекты, где это происхождение движка является отдельным критерием.

LEADTOOLS разумно выбирать не потому, что он абстрактно «лучше», а когда проекту нужен именно его баланс: PDF API, document viewer/converter, несколько целевых ОС, формы, подписи, PDF/A и возможность сочетать PDF с recognition- и imaging-компонентами одной линейки. Для узкого Java/.NET backend iText может уменьшить архитектурную ширину; для продукта, где основной критерий — Adobe engine, у Datalogics есть более прямое предложение.

Типичные проблемы и диагностика

SDK сообщает об истёкшей или недействующей runtime-лицензии

Симптом. Приложение не переходит к PDF-операции, появляется evaluation/license ошибка или KernelExpired показывает истёкшее состояние.

Возможная подтверждённая причина. RasterSupport.SetLicense не был вызван до первого SDK-метода, используется неправильная пара LEADTOOLS.LIC и LEADTOOLS.LIC.KEY либо evaluation runtime больше не действителен.

Диагностика. Проверьте порядок инициализации процесса, фактический путь к обоим license-файлам и значение RasterSupport.KernelExpired сразу после SetLicense.

Исправление. Перенесите SetLicense в начало старта приложения до обращения к LEADTOOLS и установите корректные production/evaluation license-файлы для вашей поставки.

Проверка. KernelExpired больше не блокирует процесс, после чего PDFDocument создаётся на известном тестовом PDF.

Managed-сборка найдена, но приложение не загружает native runtime

Симптом. Проект компилируется, однако при запуске возникает ошибка загрузки native-библиотеки или несовместимой архитектуры.

Возможная подтверждённая причина. Для .NET 6+ Platform.LibraryPath не указывает на подходящий native directory либо x64/x86/target platform не совпадают.

Диагностика. Сопоставьте архитектуру процесса с каталогом LEADTOOLS runtime. Для Windows x64 tutorial использует LEADTOOLS23\Bin\CDLL\x64; для других ОС используются их платформенные каталоги.

Исправление. Укажите правильный Platform.LibraryPath и включите требуемые native redistributables в deployment.

Проверка. Процесс проходит инициализацию лицензии и выполняет простое чтение PDF без loader exception.

Защищённый PDF выглядит как повреждённый

Симптом. PDFDocument или PDFFile не открывает файл, хотя обычный viewer просит пароль и после ввода показывает документ.

Возможная подтверждённая причина. Использована перегрузка конструктора без password либо пароль не передан свойству PDFFile.Password.

Диагностика. Проверяйте IsEncrypted до операций, где это доступно, и отдельно фиксируйте наличие учётных данных для входного файла.

Исправление. Используйте конструктор PDFDocument/PDFFile с паролем или задайте Password в поддерживаемом сценарии.

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

После разделения PDF перестал находиться текст

Симптом. В исходнике текст выделялся и искался, а в полученных частях страницы ведут себя как изображения.

Возможная подтверждённая причина. Для split выбран RasterCodecs. Официальный tutorial прямо описывает этот маршрут как rasterization каждой страницы.

Диагностика. Проследите, какой API создавал части документа. Если страницы загружались как raster image и затем заново кодировались в PDF, текстовый слой не сохранялся.

Исправление. Для разбиения PDF на PDF используйте PDFFile.ExtractPages, который извлекает исходные PDF-страницы.

Проверка. В новой части снова работает выделение и поиск текста, а количество страниц соответствует выбранному диапазону.

PDF/A создаётся, но ожидаемого пароля на нём нет

Симптом. SecurityOptions настроены, однако результат ConvertToPDFA не зашифрован.

Возможная подтверждённая причина. ConvertToPDFA не использует SecurityOptions и не создаёт encrypted PDF/A.

Диагностика. Проверьте, что именно вызван ConvertToPDFA, а не обычный Convert, и подтвердите результат PDFFile.IsPdfA.

Исправление. Не пытайтесь исправлять это повторным заданием SecurityOptions. Храните PDF/A в контролируемом repository и применяйте ограничения доступа на уровне системы хранения.

Проверка. Архивный файл остаётся PDF/A и открывается согласно правилам repository, без ложного ожидания document-level encryption.

Закладки дублируются после обновления

Симптом. После WriteBookmarks в документе остаются старые пункты и добавляются новые.

Возможная подтверждённая причина. WriteBookmarks не является операцией «полностью заменить старое оглавление» во всех сценариях; существующую структуру нужно учитывать отдельно.

Диагностика. До записи извлеките текущие bookmarks и сравните их с новым деревом. Определите, требуется добавление или полная замена.

Исправление. Для полной замены сначала используйте ClearBookmarks, но только после проверки внутренних ссылок, потому что этот метод удаляет и их.

Проверка. После повторного открытия виден один ожидаемый набор bookmarks, а навигация проверена отдельно.

После очистки закладок исчезли внутренние ссылки

Симптом. Оглавление очищено как планировалось, но кликабельные переходы внутри PDF больше не работают.

Возможная подтверждённая причина. ClearBookmarks удаляет существующие bookmarks вместе с internal links.

Диагностика. Сравните копию до и после ClearBookmarks, отдельно перечислив internal links, а не только дерево bookmarks.

Исправление. Вернитесь к исходной копии и используйте более точный процесс обновления навигации; после очистки восстановите необходимые internal links из заранее сохранённой структуры.

Проверка. В результате присутствуют нужные bookmarks и все требуемые переходы между страницами.

Изменённые значения формы не появляются в сохранённом PDF

Симптом. В отладчике объекты PDFFormField изменены, но открытый output показывает прежние значения.

Возможная подтверждённая причина. Поля были только разобраны через PDFDocument, а изменённая коллекция не была передана PDFFile.FillFormFields для записи.

Диагностика. Убедитесь, что ParsePages запускался с PDFParsePagesOptions.FormFields и что набор, передаваемый FillFormFields, содержит изменённые объекты.

Исправление. Запишите форму через FillFormFields в отдельный output, затем повторно разберите уже этот файл.

Проверка. Значения полей в повторном parsing совпадают с данными приложения и видны в совместимом PDF viewer.

HTML5 Document Viewer сообщает Cannot reach the LEADTOOLS Document Service

Симптом. UI viewer загружается, но документ не открывается, а demo сообщает, что не может достичь Document Service.

Возможная подтверждённая причина. Backend service не запущен, frontend настроен на неправильный service URL либо доступ блокируется сетевой конфигурацией.

Диагностика. Проверьте состояние Document Service, URL в конфигурации viewer и ошибки network/console в браузере.

Исправление. Запустите backend, исправьте адрес сервиса и сетевые правила между frontend и service.

Проверка. Viewer получает страницы и thumbnails тестового документа, а сетевые вызовы к Document Service завершаются успешно.

Оптимизированный PDF меньше, но качество стало неприемлемым

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

Возможная подтверждённая причина. PDFOptimizerOptions выбраны с приоритетом размера, который не подходит исходному содержимому.

Диагностика. Сравните исходник и output по страницам с мелкими деталями, проверьте zoom, печать и text search. Отделите image-based документы от text-searchable.

Исправление. Вернитесь к master и используйте более качественную стратегию OptimizerOptions либо исключите документы, которые уже хорошо оптимизированы.

Проверка. Новый output укладывается в допустимый размер и проходит визуальные критерии качества на контрольном наборе страниц.

Приложение работает у разработчика, но не запускается после публикации

Симптом. Локальная сборка с установленным SDK работает, а чистая production-машина получает loader или licensing ошибку.

Возможная подтверждённая причина. В deployment не включены необходимые redistributables, native runtime или production license; development seat сам по себе не даёт права и технической конфигурации для распространения.

Диагностика. Сравните содержимое каталога опубликованного приложения с перечнем зависимостей выбранного LEADTOOLS-компонента, проверьте Platform.LibraryPath и тип Deployment License.

Исправление. Добавьте разрешённые redistributables и корректную production-конфигурацию лицензии, а модель распространения согласуйте с фактическим типом desktop/server/cloud deployment.

Проверка. Приложение запускается на чистой целевой системе без установленной development-среды и выполняет контрольную PDF-операцию.

FAQ

LEADTOOLS PDF SDK — это альтернатива Adobe Acrobat для обычного пользователя?

Нет. SDK заменяет зависимость от Acrobat внутри разрабатываемого приложения, но сам не является готовым настольным редактором. Пользовательский интерфейс нужно создать или собрать из viewer-компонентов.

Нужен ли интернет для обработки локального PDF?

Для нативной работы PDFDocument и PDFFile обязательный cloud service не требуется. Интернет появляется в выбранных web-сценариях, например при использовании Document Viewer вместе с Document Service или внешними хранилищами.

Можно ли читать PDF из Stream?

PDFDocument имеет конструкторы для файла и Stream, включая варианты с паролем. PDFFile во многих файловых преобразованиях ориентирован на имя файла; поэтому потоковый и файловый сценарии не следует считать взаимозаменяемыми для всех методов.

Сохраняет ли split поисковый текст?

Да, когда разделение выполняется PDFFile.ExtractPages над PDF-страницами. RasterCodecs-путь из официального tutorial растеризует страницы, поэтому текстовая поисковость теряется.

Есть ли у SDK OCR для сканированных PDF?

PDF-направление LEADTOOLS интегрируется с OCR и другими recognition-технологиями, а evaluation включает их вместе с PDF. Для production-проекта состав коммерческой лицензии нужно определять по фактически подключённым модулям; PDF Developer Toolkit не следует автоматически приравнивать ко всему recognition-набору.

Можно ли локализовать интерфейс на русский язык?

У низкоуровневого SDK нет единственного обязательного end-user интерфейса. Текст кнопок, меню, локализацию и UX задаёт приложение разработчика. Demo-проекты служат примерами реализации, а не фиксируют язык будущего продукта.

Поддерживает ли SDK цифровую подпись или только картинку подписи?

Поддерживает цифровую подпись из PFX через SignDocument, чтение сведений о встроенных подписях и их проверку. Отдельный eSignature workflow в Document Viewer относится к пользовательской подписи и может сочетаться с certificate-based digital signing.

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

Текущая страница LEADTOOLS PDF не публикует фиксированную стоимость. Известна структура лицензии — development seats и deployment — но итоговый quote зависит от числа разработчиков и модели распространения приложения.

В чём смысл PDFDocument и PDFFile, если оба работают с PDF?

PDFDocument ориентирован на чтение, страницы и объекты документа, включая Stream и parsing. PDFFile предоставляет операции над самим файлом: преобразования, страницы, PDF/A, оптимизацию, security, bookmarks и другие функции записи. Разделение ролей помогает не смешивать инспекцию документа с изменением output.

Можно ли строить пакетную обработку без графического интерфейса?

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

Итог

LEADTOOLS PDF SDK имеет смысл там, где PDF — часть собственного программного продукта, а не самостоятельная пользовательская задача. Для server automation ценны PDFFile, PDFDocument, forms, pages, PDF/A, optimization, security и signatures. Для приложения с человеческим интерфейсом к ним можно добавить Document Viewer. Для кроссплатформенного продукта важна поддержка desktop, mobile и Web, но за неё приходится платить архитектурной сложностью и отдельно планировать deployment.

Если требуется только создать или изменить PDF в Java/.NET, стоит сопоставить LEADTOOLS с iText и не брать лишний document stack. Если критичен единый коммерческий SDK для mobile/Web/desktop, прямой конкурент — Foxit. Если решение строится вокруг совместимости с движком Adobe и серверной PDF-обработки, Adobe PDF Library заслуживает отдельного сравнения. LEADTOOLS выигрывает именно в сценарии, где нужен широкий набор PDF и document-компонентов одной экосистемы, а команда готова спроектировать собственный UI, runtime, безопасность и лицензирование.

До покупки рационально собрать evaluation-прототип на реальных документах: измерить скорость и память на своём железе, проверить формы и защищённые файлы, подтвердить качество оптимизации, убедиться в сохранении text layer при page operations и перечислить все использованные компоненты. После такого прототипа можно получить deployment quote уже для реальной архитектуры, а не для абстрактного «PDF SDK». Это снижает риск купить неподходящий состав модулей и обнаружить лицензионные или технические ограничения после запуска продукта.