Native Linux and macOS
Сборки под Windows 11 ARM64 и Delphi ARM64EC описаны на странице Windows on ARM
Нативный бэкенд FPC поддерживает работу библиотеки без GUI на Linux и macOS, где отдельные цели x64 и ARM64 дают настоящие программы ELF и Mach-O; Delphi собирает динамические библиотеки macOS без GUI под обе архитектуры
Используйте существующий API TPDFlib для создания PDF, сохранения и загрузки, извлечения и редактирования текста, структурированного извлечения, переносимых колбэков OCR, растрового рендеринга, метаданных, шифрования, доступа к сетевым диапазонам и нативной подписи PFX
Матрица нативных платформ
| Платформа | Нативное окружение | Маршрут сборки |
|---|---|---|
| Linux x64 | Ubuntu WSL 2 или физический x64-хост с Linux | FPC x86_64-linux |
| Linux ARM64 | Хост или виртуальная машина с Linux на ARM64, включая Multipass | FPC aarch64-linux |
| macOS x64 | Mac на Intel | Нативный FPC x86_64-darwin или Delphi OSX64 |
| macOS ARM64 | Mac на Apple Silicon | Нативный FPC aarch64-darwin или Delphi OSXARM64 |
Используйте FPC 3.3.1 с соответствующими RTL и пакетами и целью, совпадающей с операционной системой и архитектурой вашего приложения
Зависимости времени выполнения
| Провайдер | Библиотека | Назначение |
|---|---|---|
| OpenSSL 3 | libcrypto | AES CBC/GCM, дайджесты, идентичности PKCS12, подписи CMS, целостность и явные цепочки привязок доверия |
| libcurl | libcurl с асинхронным DNS | HTTP/HTTPS, ограниченный бинарный транспорт, доступ к диапазонам и запросы RFC 3161 |
| Cairo | libcairo | Растровые поверхности изображений, пути, отсечение, контуры глифов и изображения |
| Fontconfig | libfontconfig | Реальное сопоставление нативных файлов шрифтов, включая явную подстановку семейств |
| libxml2 | Системный libxml2 на macOS | Разбор XMP XML в Delphi, редактирование с учётом пространств имён и сериализация |
| OpenJPEG 2 | libopenjp2 | Декодирование и кодирование JPEG 2000 |
Linux x64 и ARM64 загружают системные библиотеки по SONAME, соответствующим архитектуре; macOS ARM64 по умолчанию берёт библиотеки из /opt/homebrew, macOS x64 — из /usr/local, и обе используют системные libcurl и libxml2
Отсутствующие библиотеки или символы и неподдерживаемые операции дают явные сбои; замена контекста устройства Windows не используется
Подписи и штампы времени
Провайдер PFX по умолчанию поддерживает настоящие идентичности RSA и EC, отсоединённые CMS, CAdES и устаревшие присоединённые профили SHA1; проверка сверяет байты ByteRange PDF и подпись CMS
Проверка цепочки сертификатов требует явных привязок доверия; встроенные сертификаты не дают доверия, и одна лишь целостность доверие не подразумевает
ApplyPAdESSignatureTimeStamp использует настроенный нативный HTTP-транспорт по умолчанию, чтобы получить и прикрепить настоящий токен RFC 3161; заранее зарезервируйте достаточную ёмкость /Contents до исходной подписи
Проверка штампа времени сверяет подписанный токен, отпечаток сообщения, исключительный критический EKU timeStamping, имя TSA, опциональные ожидаемые policy/nonce и доверенную цепочку сертификатов на момент генерации токена
Штампы времени документа также проверяют фактический отпечаток ByteRange PDF; вызывающий может использовать существующий passthrough-сценарий DocTimeStamp и передать токен сам
Метаданные и рендеринг
XMP-провайдеры FPC и Delphi под macOS используют настоящие DOM с учётом пространств имён и сохраняют несвязанные свойства при правках; Delphi использует системные парсер и сериализатор libxml2
DTD-объявления отклоняются XML-читателем независимо от кодировки источника; входные и декодированные символы ограничены, а потоковый проход ограничивает глубину и события узлов до построения DOM
Рендеринг использует настоящее нативное растровое хранилище и поверхности изображений Cairo; полосовой рендеринг сохраняет координаты пространства устройства и использует защитные строки, чтобы сглаживание на границах оставалось согласованным
Нативное встраивание шрифтов семейств разрешает фактический файл Fontconfig и встраивает полную автономную программу TrueType с CIDFontType2, Identity CIDToGIDMap, инициализированными метриками и ширинами Unicode; текст BMP и переносимые слои OCR переживают сохранение и перезагрузку PDF
Точка входа отклоняет невстроенные шрифты семейств, коллекции, программы CFF и права на встраивание только растровых шрифтов; ограниченное встраивание требует существующего явного переопределения прав, а шрифты, запрещающие subsetting, остаются полными программами
Ограничения
- Контексты устройства Windows, EMF, GUI, буфер обмена и печать находятся вне нативного бэкенда без GUI
- Сложный нативный шейпинг текста и идентичности из хранилища сертификатов Windows недоступны
- Точка входа встраивания автономного TrueType пока поддерживает текст BMP; текст дополнительной плоскости, извлечение граней TTC и встраивание CFF выходят за рамки этой точки входа
- Онлайн-отзыв OCSP/CRL недоступен; запросы проверки отзыва сообщают неизвестный результат
- Нативный провайдер PFX по умолчанию отклоняет RSA-PSS и дополнительные атрибуты подписи policy, commitment или revocation
- Нативные преобразования CMYK/ICC и запись индексированного однобитного BMP недоступны
- HTTP требует поддержки асинхронного DNS в libcurl, чтобы соблюдались тайм-ауты поиска DNS
Требования к компилятору
Перед сборкой приложения проверьте выбранную версию FPC, целевой CPU и целевую операционную систему
fpc -iV
fpc -iTP
fpc -iTO
Для явного выбора конфигурации компилятора используйте -n @/path/to/fpc.cfg; держите пути RTL и пакетов согласованными с версией компилятора и целью
Не добавляйте -FcUTF8: он меняет обработку старших байтов в AnsiString и может повредить бинарные идентификаторы PDF и значения шифрования
Динамическая библиотека C ABI для macOS
Шаблоны локальной конфигурации, полную матрицу выходных каталогов, развёртывание, владение в C ABI и рабочий пример на Python см. на странице Конфигурация и использование dylib
Существующая поверхность экспорта динамической библиотеки из 880 записей собирается нативным Free Pascal на macOS x64 или ARM64 либо кросс-компилируется из Windows с помощью Delphi; оба варианта дают одинаковые имена C-символов
export FPC=/path/to/aarch64-darwin/fpc
export PDFLIB_FPC_CONFIG=/path/to/fpc.cfg
bash Dylib/Build-native.sh release full
python3 Dylib/examples/create_pdf.py Dylib/OSXARM64/FPC-release-full/libPDFlibDylib.dylib /tmp/hello-dylib.pdf
На Mac с x64 выберите нативный компилятор x86_64-darwin и используйте соответствующий выходной путь Dylib/OSX64/FPC-release-full
Не задавайте PDFLIB_FPC_CONFIG, если у компилятора уже есть корректная конфигурация; для отдельной TRIAL-сборки используйте debug trial, а PDFLIB_DYLIB_OUTPUT задаёт внешний выходной каталог
C ABI на системах и Intel, и ARM64 использует 32-битные непрозрачные дескрипторы экземпляров и строки UTF-16 PWideChar; привязки из других языков должны передавать кодовые единицы UTF-16, а не нативное представление wchar_t хоста
DLCreateBuffer возвращает записываемые данные, принадлежащие экземпляру, включая встроенные нулевые байты; DLReleaseBuffer возвращает 1 при успехе и 0 для неизвестного или уже освобождённого буфера, а освобождение экземпляра делает недействительными все его буферы и возвращённые строки
Экземпляр 0 остаётся псевдонимом экземпляра по умолчанию; явные положительные дескрипторы не переиспользуются, пока загруженная библиотека живёт, а выгрузка освобождает незакрытые экземпляры и буферы
Сериализуйте вызовы, работающие с одним экземпляром, а создание и освобождение экземпляра — относительно других вызовов C ABI; блокировка реестра не защищает экземпляр после поиска
Кросс-компиляция из Delphi
Сборочные скрипты под Windows выбирают dccosx64 или dccosxarm64, требуют локального кэша macOS SDK, раздельного полного и TRIAL-вывода и проверяют заголовок полученного Mach-O, прежде чем публиковать результат сборки
Задайте PDFLIBPAS_MACOS_SDK или передайте sdk path; PDFLIBPAS_MACOS_LINKER может выбрать Mach-O-компоновщик LLVM с именем ld64.lld.exe, если установленный компоновщик по умолчанию не читает файлы .tbd из SDK
Delphi использует файловые API POSIX, именованные ресурсы RCDATA, системные zlib и libcurl, общие нативные провайдеры OpenSSL/Fontconfig/Cairo/OpenJPEG и Apple ImageIO для изображений JPEG
set PDFLIBPAS_MACOS_SDK=C:\SDKs\MacOSX.sdk
set PDFLIBPAS_MACOS_LINKER=C:\LLVM\bin\ld64.lld.exe
Dylib\Build-dylib.bat osxarm64
Dylib\Build-dylib-TRIAL.bat osxarm64 debug
Dylib\Build-dylib.bat osx64
Dylib\Build-dylib-TRIAL.bat osx64 debug