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
| Plattform | Nativ miljö | Kompileringsväg |
|---|---|---|
| Linux x64 | Ubuntu WSL 2 eller en fysisk x64-Linuxvärd | FPC x86_64-linux |
| Linux ARM64 | ARM64-Linuxvärd eller virtuell maskin, inklusive Multipass | FPC aarch64-linux |
| macOS x64 | Intel-Mac | Nativ FPC x86_64-darwin eller Delphi OSX64 |
| macOS ARM64 | Mac med Apple silicon | Nativ 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
| Provider | Bibliotek | Syfte |
|---|---|---|
| OpenSSL 3 | libcrypto | AES CBC/GCM, sammandrag, PKCS12-identiteter, CMS-signaturer, integritet och uttryckliga förtroendeankarkedjor |
| libcurl | libcurl med asynkron DNS | HTTP/HTTPS, avgränsad binärtransport, intervallåtkomst och RFC 3161-begäranden |
| Cairo | libcairo | Bitmapbildytor, pather, clipping, glyfkonturer och bilder |
| Fontconfig | libfontconfig | Faktisk nativ matchning av teckensnittsfiler, inklusive uttrycklig familjeersättning |
| libxml2 | Systemets libxml2 på macOS | Delphi XMP XML-parsning, namnrymdsmedveten redigering och serialisering |
| OpenJPEG 2 | libopenjp2 | JPEG 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
- Windows-device-kontexter, EMF, GUI, urklipp och utskrift ligger utanför den nativa headless-backend:en
- Komplex nativ textformning och Windows systemcertifikatlager-identiteter är inte tillgängliga
- Posten för fristående TrueType-inbäddning stöder för närvarande BMP-text; text i kompletmentarplanet, TTC-ansiktesextraktion och CFF-inbäddning ligger utanför posten
- Online-OCSP/CRL-spärrning är inte tillgänglig; begäranden om spärrningsverifiering rapporterar ett okänt resultat
- Standardprovidern för nativ PFX avvisar RSA-PSS samt extra policy-, åtagande- eller spärrningssigneringsattribut
- Nativa CMYK/ICC-transformer och indexerad 1-bits BMP-skrivning är inte tillgängliga
- HTTP kräver asynkront DNS-stöd i libcurl för att respektera tidsgränser för DNS-uppslagning
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