Loaded Document Toolkit
HotPDF умеет открывать существующий PDF, выполнять операции со страницами и формами, анализировать типизированное состояние документа, рендерить страницы и искать по ним, печатать с учётом возможностей устройства и сохранять результат, не переводя рабочий процесс на другую библиотеку
Page operations and merging
THotPDF.DeletePagesпринимает стандартный синтаксис диапазонов страниц с нумерацией с 1, дедуплицирует повторные выборки и сохраняет валидное дерево страниц- Удаление загруженных страниц отвязывает widget-аннотации и пустые ветви полей AcroForm, принадлежавшие только удалённым страницам
THotPDF.InsertPagesFromDocumentиTHotPDF.AppendPagesFromDocumentпринимаютTHPDFMergeOptions- Конфликты имён форм проверяются до вставки страниц, когда автоматическое переименование выключено, так что отклонённое слияние оставляет число страниц приёмника неизменным
THPDFMergeOptionзначения —moIncludeOutlines,moIncludeFormFields, иmoRenameConflictingFormFields- Назначения outline переназначаются через выбранную карту страниц источник-приёмник, а импортированные корни форм регистрируются в AcroForm приёмника
THotPDF.InsertLoadedBlankPageвставляет пустую страницу заданного вызывающим размера в точную позицию с нумерацией с 0THPDFWatermarkTemplate.MakeCurveдобавляет кубическую кривую Безье в упорядоченные составные watermark-и загруженных страницTHPDFPage.AddCurveWatermarkдаёт тот же примитив кубической Безье при авторинге нового документа- Setter-ы метаданных загруженного документа помечают словарь Info грязным, чтобы инкрементные сохранения удерживали отредактированные поля
BeginIncrementalUpdateдержит исходный файл заблокированным на запись и подложенным файлом с ограниченным зондированием хвоста вместо удержания всего файла в памятиSaveIncrementalUpdateобходит только отслеженные изменения, стримит исходный префикс в новую цель и использует валидированное защищённое откатом прямое дописывание для той же целиOpenLoadedPageContentStreamоткрывает одиночные и массивные значения/Contentsкак один seekable логический поток, удерживает нефильтрованные сегменты в подложенном источником хранилище и декодирует не более одного фильтрованного сегмента за раз- Редактирование страницы, чьё значение
/Contents— массив, дописывает свежий косвенный сегмент, не сливая и не очищая исходные потоки, а рендеринг и материализация совместимости используют геометрически растущие токенные и байтовые буферы - Setter-ы загруженных аннотаций обновляют содержимое, заголовок, уникальное имя, дату изменения, прямоугольник, флаги, цвет и стиль границы прямо на существующем объекте аннотации
- Концы прямоугольника аннотации нормализуются, пунктирные границы сохраняют только положительные длины штрихов, а визуальные изменения инвалидируют кэш отрисовки только затронутой страницы
ActivateLoadedLinksнаходит голые веб- и email-адреса в позиционированных глифовых run-ах, создаёт URI-аннотации без рамки и пропускает совпадения с существующими ссылками, не пересканируя список аннотаций для каждого кандидатаExtractLoadedPagesTextToStreamпишет текст страницы в UTF-8 напрямую в поток вызывающего с управлением диапазоном, разделителем и BOMTHPDFViewerModelоткрывает hit-тестирование полей формы страницы и детерминированную клавиатурную навигацию сверху вниз без создания окна- Проверка загруженных подписей поддерживает RSA PKCS#1 v1.5, RSA-PSS с валидацией параметров, ECDSA и метки времени документа и подписи RFC 3161; строгие проверки byte-range сообщают длину подписанной ревизии и неподписанный хвост, сохраняя позицию потока вызывающего
THPDFSignatureInfo.CertificateTimeValidityклассифицирует границы сертификатов и согласованность времени подписи, не меняя криптографическуюsvValidсемантикуVerifyLoadedSignatureWithTrustстроит путь подписанта до переданных вызывающим trust anchor-ов и валидирует офлайн-свидетельства OCSP или CRL, предпочитая per-signature данные VRI раньше документного DSS и свидетельств вызывающегоAnalyzeLoadedSignatureRevisionsобходит традиционные, потоковые, гибридные и compressed-object истории xref, классифицирует поздние изменения как долгосрочную валидацию, заполнение и подписание форм, аннотации или прочие модификации, и оценивает DocMDP и FieldMDP независимоSanitiseLoadedDocumentприменяет политики «только JavaScript», активного контента или строгой недоверенности документа к полному графу объектов, убирает недостижимые объекты-нагрузки и готовит ограниченную компактную перезаписьScrubLoadedRedactionRemnantsубирает метаданные, вложения, Redact-аннотации, недостижимые ресурсы и удерживаемые инкрементные исходные байты перед компактной полной перезаписью- Ограниченное восстановление перекрёстных ссылок перемещает целые секции xref или перестраивает валидированные смещения прямых объектов после повреждённых
startxrefи данных xref, с управляемыми вызывающим бюджетами сканирования и структурированной диагностикой - Масштабируемая загрузка держит тела файловых потоков подложенными источником до мутации, лениво разрешает compressed object-ы и принимает пользовательские
THPDFRandomAccessSourceреализации DecodeLoadedStreamToStreamпрогоняет ограниченные цепочки фильтров в потоки вызывающего, а общесчётный учёт байтов документа, лимиты числа фильтров, проверки циклов косвенных ссылок и ограничители глубины конвейера защищают от враждебных входовExtractLoadedImageToStreamкопирует нативные полезные нагрузки изображений или общий декодированный вывод фильтров напрямую в потоки вызывающего, не материализуя полноразмерный байтовый массивExportLoadedPagesStructuredсериализует семантический порядок чтения, таблицы, геометрию, стили и ограниченные вхождения изображений в HTML, XHTML, XML или JSONExtractLoadedTypedTablesстроит канонические сетки с оценкой уверенности, объединёнными span-ами, повторяющимися заголовками, межстраничным продолжением, типизированными значениями и атомарным экспортом в CSV или JSONOptimizeLoadedStreamsвыбирает кандидатов unfiltered, Flate, LZW, ASCII85, ASCIIHex и RunLength, сбрасывает большие рабочие буферы во временные файлы, может после базовой линии из четырёх zlib-стратегий прогнать бюджетированный Zopfli и принимает только замены, преодолевающие положительный порог экономииSubsetLoadedFontsубирает недостижимые глифовые программы из поддерживаемых встроенных шрифтов TrueType и CFF после трассировки контента страниц, Form XObject и appearance аннотаций, сохраняя существующие маппинги символов, CID, глифов, ширин и ToUnicodeSetDocumentAttachmentMetadataпереименовывает встроенный файл и обновляет его описание до сохранения документаTHPDFLoadedFormFieldоткрывает флаги, MaxLen, индекс страницы, границы и типовые поведения текстовых полей для инспекторов свойствTHPDFViewerModelсоздаёт принадлежащие вызывающему снимки страниц и пишет текущую страницу как BMP, JPEG или PNG в файлы и потоки, переиспользуя кэш отрисовки загруженного документаTHPDFViewerModelвращает текущий вид и сгенерированные снимки шагами по 90 градусов, не меняя загруженную PDF-страницуTHPDFViewerModelсоздаёт aware-относительно поворота enhanced metafiles, сохраняя масштабируемые текстовые и векторные записи рисованияTHPDFViewer.DrawCurrentViewиPrintCurrentViewвписывают и центрируют активный векторный вид на canvas вызывающего или странице принтераTHPDFViewerModel.ProcessKeyInputдаёт тестируемые команды страниц и зума, пока стрелочная прокрутка остаётся на стороне ViewerTHPDFViewerModel.ProcessMouseWheelдаёт тестируемый зум Ctrl+колесо, пока вертикальная и горизонтальная прокрутка остаются на прямой стороне ViewerTHPDFViewerModel.GetNextZoomLevelиGetPreviousZoomLevelоткрывают детерминированную навигацию по стандартным зумам от 5% до 6400%THPDFViewerModel.PagePointToViewиViewPointToPageдают обратимые координаты через поворот страницы, поворот вида, смещения MediaBox и DPITHPDFViewerModel.CreatePageRegionSnapshotрисует только запрошенный прямоугольник PDF для ограниченных по памяти снимков выделенияTHPDFViewer.ResetViewвосстанавливает умолчания показа, не выгружая документ и не меняя текущую страницу
Forms and search
THotPDF.AddLoadedRadioButtonсоздаёт родительское radio-поле с дочерними widget-ами, общими export-значениями и валидными состояниями appearance on/off- Загруженные поля формы могут обновлять флаги, максимальную длину, выравнивание, tooltip, прямоугольники отдельных widget-ов, поворот, видимость, печать, ширину и цвет границы и цвет фона с отслеживанием грязи для инкрементных сохранений
GetLoadedFormFieldNameValuePairsиSetLoadedFormFieldNameValuePairsобмениваются лёгкимиname=valueпакетами черезTStringsExtractLoadedPagesTextагрегирует диапазон страниц с нумерацией с 1 с выбранным вызывающим разделителемCMapResourcePathпереопределяет автоматическое обнаружение CMap корнем, выбранным вызывающим и содержащим стандартные папки коллекций- Присваивание
CMapResourcePathсбрасывает декодеры загруженных шрифтов, даже если путь не изменился; вызывайтеHPDFClearCMapCachesсначала, когда заменённые внешние ресурсы тоже надо перезагрузить - Стандартные CMap-маппинги кэшируются на разрешённый корень ресурсов, поддерживают конкурентный доступ к таблицам и используют логарифмический поиск, когда таблицы символов и диапазонов упорядочены
- Полные маппинги UniJIS, UniGB, UniCNS и UniKS UCS2 и UTF16 встроены для горизонтального и вертикального текста, включая дополнительные скаляры и стандартные вертикальные умолчания, когда
/DW2отсутствует - Декодеры загруженных шрифтов используют document-scoped взвешенный LRU-кэш на 32 MiB, разделяемый извлечением текста, SVG-экспортом, заменой текста и явными запросами декодера
GetLoadedFontDecoderвозвращает независимую глубокую копию, а внутренние read-only потребители переиспользуют кэшированное разобранное ядроLoadedFontDecoderCacheMaxBytes,GetLoadedFontDecoderCacheInfo, иResetLoadedFontDecoderCacheStatisticsуправляют и измеряют переиспользование кэша- Регионы JPEG в градациях серого и RGB низкого разрешения используют уменьшенное inverse-DCT масштабирование и прямое построчное ресемплирование без материализации полноразмерного растра
GetLastJPEGReducedDecodeInfoсообщает геометрию источника, масштабирования, вывода, строк развёртки и рабочей памяти для последнего совместимого запросаAcquireLoadedImageStreamиAcquireLoadedImageRegionAtResolutionвозвращают неизменяемые разделяемые хэндлы без пиксельных копий тёплых попаданий, а кэшированныеTBitmapметоды сохраняют принадлежащую вызывающему совместимостьGetImageDecodeConcurrencyInfoсообщает активные flight-ы, пиковые параллельные owner-декодирования, дублирующиеся ожидания, завершения и отказыTHotPDF.SearchLoadedNext— нехранящий состояния примитив локального поиска по странице, движущийся вперёд от предыдущегоTHPDFTextMatchTHPDFLoadedDocumentFacadeгруппирует загруженные формы, аннотации, outline, шрифты и изображения в типизированные объекты-коллекцииTHPDFLoadedFormInfoвключает текущее и умолчальное значение, тип поля, описание, флаг read-only и опции выбора
Outlines and resources
THotPDF.GetLoadedOutlineEntriesвозвращает полный снимок в порядке preorder в видеTHPDFLoadedOutlineEntryArray- Каждый
THPDFLoadedOutlineEntryсодержит индекс, индекс родителя, уровень, заголовок и разрешённый индекс страницы назначения THPDFLoadedOutlineInfoexposes the same hierarchy throughTHPDFLoadedOutlineCollectionTHPDFLoadedResourceCollectionперечисляет шрифты и загруженные изображения и умеет извлекать поддерживаемые изображения в виде bitmap, которыми владеет вызывающая сторона
System certificate signing
THotPDF.SignPDFWithSystemCertificateподписывает файловый или потоковый вход приватным ключом из хранилища сертификатов WindowsTHotPDF.GetLoadedSignaturePermissionsчитает структуры DocMDP, linkage разрешений Catalog, SigFieldLock и FieldMDP вTHPDFSignaturePermissionInfoне выдавая структурную политику за криптографическую валидностьTHPDFCertificateStoreSelectorвыбирает охват current-user или local-machine, имя хранилища, SHA-1 thumbprint и то, разрешён ли UI провайдера ключейTHPDFCMSSignDigestCallbackиHPDFCMSSignPDFStreamWithExternalSignerдают нижележащий хук подписанта с внешним дайджестом- Ключи CNG используют подпись RSA PKCS#1 SHA-256, а legacy CSP-ключи — эквивалентный путь CryptoAPI
Printing
THPDFPrintOptionsподдерживает печать копий с разбором по комплектам (collate), код бумаги, произвольные ширину и длину бумаги, ориентацию, дуплекс, лоток и качествоTHPDFPrinterCapabilitiesсообщает параллельные списки кодов бумаги, названий и физических размеров, а также лотки, разрешения, дуплекс, цветность и максимальное число копийHPDFBuildPrintPageSequenceоткрывает детерминированную последовательность физических страниц, используемую для заданий с разбором по комплектам и без него
VCL viewer components
THPDFViewerModelуправляет навигацией, состоянием масштаба, результатами текстового поиска, циклическим переходом и уведомлениями об изменениях, не создавая окнаTHPDFViewerрендерит выбранную страницу в прокручиваемый кэшированный bitmap, поддерживает реальный размер, по размеру страницы, по ширине, произвольный масштаб и поворот вида, а найденные совпадения поиска рисует поверх отрендеренной страницыTHPDFSearchPanelсвязывает с viewer текст поиска, учёт регистра, поиск целых слов и переход к следующему или предыдущему совпадениюTHPDFOutlineViewerотображает полное рекурсивное дерево закладок, отслеживает изменения документа в связанном viewer и управляет навигацией в нёмTHPDFViewerActiondescendants provide first, prior, next, last, zoom, fit, rotation, reset, find-next, and clear-search actions
Minimal viewer setup
PDF.LoadFromFile('input.pdf');
PDFViewer.PDFDocument := PDF;
OutlineViewer.Viewer := PDFViewer;
SearchPanel.Viewer := PDFViewer;
PDFViewer.ZoomMode := vzmFitWidth;
Ownership and indexing
- Индексы загруженных страниц и индексы страниц назначения отсчитываются с нуля
- Строки диапазонов страниц отсчитываются с единицы и разбираются тем же парсером, что и при извлечении и печати
- Записи фасада — это снимки, а методы изменения коллекций работают с текущим загруженным документом
- Извлечённые bitmap принадлежат вызывающей стороне
Related typed inspection and placement records
THPDFPageElementKind,THPDFPageElementиTHPDFBaselineRoleописывают результаты по тексту, изображениям, контурам и базовым линиям, которые возвращает анализ элементов загруженной страницыTHPDFWatermarkKind,THPDFWatermarkHorizPosиTHPDFWatermarkVertPosопределяют содержимое и положение водяных знаков в загруженном документе