Native Linux and macOS

För Windows 11 ARM64- och Delphi ARM64EC-byggen, se Windows on ARM

Den nativa FPC-backend:en stödjer headless-biblioteksarbetsflöden på Linux och macOS, med separata x64- och ARM64-mål som producerar riktiga ELF- och Mach-O-program; Delphi bygger headless-dylib-filer för macOS i båda arkitekturerna

Använd det befintliga TPDFlib-API:et för PDF-skapande, sparande/inläsning, textextraktion och redigering, strukturerad extraktion, portabla OCR-callbacks, bitmappsrendering, metadata, kryptering, nätverksintervallåtkomst och nativ PFX-signering

Nativ plattformsmatris

PlattformNativ miljöKompileringsväg
Linux x64Ubuntu WSL 2 eller en fysisk x64-LinuxvärdFPC x86_64-linux
Linux ARM64ARM64-Linuxvärd eller virtuell maskin, inklusive MultipassFPC aarch64-linux
macOS x64Intel-MacNativ FPC x86_64-darwin eller Delphi OSX64
macOS ARM64Mac med Apple siliconNativ FPC aarch64-darwin eller Delphi OSXARM64

Använd FPC 3.3.1 med matchande RTL/paket och ett mål som matchar programmets operativsystem och arkitektur

Körningsberoenden

ProviderBibliotekSyfte
OpenSSL 3libcryptoAES CBC/GCM, sammandrag, PKCS12-identiteter, CMS-signaturer, integritet och uttryckliga förtroendeankarkedjor
libcurllibcurl med asynkron DNSHTTP/HTTPS, avgränsad binärtransport, intervallåtkomst och RFC 3161-begäranden
CairolibcairoBitmapbildytor, pather, clipping, glyfkonturer och bilder
FontconfiglibfontconfigFaktisk nativ matchning av teckensnittsfiler, inklusive uttrycklig familjeersättning
libxml2Systemets libxml2 på macOSDelphi XMP XML-parsning, namnrymdsmedveten redigering och serialisering
OpenJPEG 2libopenjp2JPEG 2000-avkodning och -kodning

Linux x64 och ARM64 läser in sina arkitekturanpassade system-SONAME:er; macOS ARM64 använder som standard /opt/homebrew, macOS x64 /usr/local, och båda använder systemets libcurl och libxml2

Saknade bibliotek, symboler eller åtgärder som inte stöds ger uttryckliga fel; ingen Windows-device-context-ersättning används

Signering och tidsstämplar

Standard-PFX-providern stödjer riktiga RSA- och EC-identiteter, fristående CMS, CAdES och äldre bifogade SHA1-profiler; verifieringen kontrollerar PDF ByteRange-byte och CMS-signaturen

Verifikation av certifikatkedjor kräver uttryckliga förtroendeankare; inbäddade certifikat ger inte förtroende, och integritet ensamt innebär inte förtroende

ApplyPAdESSignatureTimeStamp använder den konfigurerade standardtransporten för nativ HTTP för att hämta och bifoga en riktig RFC 3161-token; reservera tillräcklig /Contents-kapacitet före den ursprungliga signaturen

Verifikation av tidsstämplar kontrollerar den signerade token, message imprint, den exklusiva kritiska timeStamping-EKU:n, TSA-namnet, valfri förväntad policy/nonce och den betrodda certifikatkedjan vid tidpunkten för tokengenereringen

Dokumenttidsstämplar verifierar också det faktiska PDF ByteRange-avtrycket; anroparen kan använda det befintliga DocTimeStamp-passthrough-arbetsflödet och lämna token

Metadata och rendering

XMP-leverantörerna för FPC och Delphi macOS använder riktiga namnrymdsmedvetna DOM:er och bevarar främmande egenskaper vid redigeringar; Delphi använder systemets libxml2-parser och serialiserare

DTD-deklarationer avvisas av XML-läsaren oavsett källkodning; indata och avkodade tecken är avgränsade, och ett strömmande pass begränsar djup och nodhändelser innan DOM:en byggs

Renderingen använder riktig nativ bitmappslagring och Cairo-bildytor; bandad rendering bevarar enhetsrymdskoordinater och använder skyddsrader för att hålla utjämningen vid gränser konsekvent

Nativ inbäddning av familjeteckensnitt löser upp en faktisk Fontconfig-fil och bäddar in ett komplett fristående TrueType-program med CIDFontType2, Identity CIDToGIDMap, initierade metriker och Unicode-bredder; BMP-text och portabla OCR-lager överlever PDF-sparande/-inläsning

Posten avvisar icke inbäddade familjeteckensnitt, kollektioner, CFF-program och enbart-bitmapps-inbäddningsrättigheter; begränsad inbäddning kräver den befintliga uttryckliga rättighetsöverridningen, och teckensnitt som förbjuder subsetting förblir kompletta program

Gränser

Kompilatorförutsättningar

Kontrollera vald FPC-version, mål-CPU och måloperativsystem innan du bygger ditt program

fpc -iV
fpc -iTP
fpc -iTO

Använd -n @/path/to/fpc.cfg när du väljer en uttrycklig kompilatorkonfiguration; håll RTL- och paketsökvägarna konsistenta med kompilatorversionen och målet

Lägg inte till -FcUTF8, eftersom det ändrar hanteringen av AnsiString med höga byte och kan förstöra binära PDF-identifierare och krypteringsvärden

Dynamiskt macOS-bibliotek med C ABI

Se Dylib-byggkonfiguration och användning för lokala konfigurationsmallar, den kompletta utdatamatrisen, driftsättning, C ABI-ägarskap och ett fungerande Python-exempel

Den befintliga exportytan för det dynamiska biblioteket med 880 ingångspunkter kan byggas med nativ Free Pascal på macOS x64 eller ARM64 eller korskompileras från Windows med Delphi; båda exponerar samma C-symbolnamn

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

På en x64-Mac väljer du en nativ x86_64-darwin-kompilator och använder motsvarande utdatasökväg Dylib/OSX64/FPC-release-full

Utelämna PDFLIB_FPC_CONFIG när kompilatorn redan har en giltig konfiguration; använd debug trial för det separata trial-bygget, eller sätt PDFLIB_DYLIB_OUTPUT till en extern utdatakatalog

C ABI använder 32-bitars opaka instanshandtag och UTF-16 PWideChar-strängar på både Intel- och ARM64-system; bindningar från andra språk måste leverera UTF-16-kodenheter i stället för värdens nativa wchar_t-representation

DLCreateBuffer returnerar skrivbara data som ägs av dess instans, inklusive inbäddade nollbyte; DLReleaseBuffer returnerar 1 vid lyckat resultat och 0 för en okänd eller redan frigjord buffert, och att frigöra en instans ogiltigförklarar alla dess buffertar och returnerade strängar

Instans 0 är fortfarande standardaliaset för instanser; uttryckliga positiva handtag återanvänds inte under det laddade bibliotekets livstid, och urladdning frigör utestående instanser och buffertar

Serialisera anrop som använder samma instans, och serialisera instansskapande eller -frigivning mot andra C ABI-anrop; registrelåset skyddar inte en instans efter uppslagning

Delphi-korskompilering

Windows-byggskripten väljer dccosx64 eller dccosxarm64, kräver en lokal macOS SDK-cache, separat full- och trial-utdata, och validerar den producerade Mach-O-rubriken innan byggutdata publiceras

Sätt PDFLIBPAS_MACOS_SDK eller skicka sdk path; PDFLIBPAS_MACOS_LINKER kan välja en Mach-O LLVM-länkare med namnet ld64.lld.exe när den installerade standardlänkaren inte kan läsa SDK:ns .tbd-filer

Delphi använder POSIX-fil-API:er, namngivna RCDATA-resurser, systemets zlib och libcurl, de delade nativa OpenSSL-/Fontconfig-/Cairo-/OpenJPEG-leverantörerna samt Apple ImageIO för JPEG-bilder

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

Referensindex