Natywne C ABI Linux

HotPDFLinuxABI.lpr buduje natywną współdzieloną bibliotekę ELF x86_64 o nazwie libhotpdf.so.1, z SONAME libhotpdf.so.1 i symbolami publicznymi przypisanymi do HOTPDF_1.0

Biblioteka używa THPDFHeadlessDocument i renderowania CPU bez komponentu Windows, aktywnego pulpitu, czytnika PDF albo procesu Python w runtime; Python jest używany przez skrypty budowania i akceptacji

Budowanie i akceptacja

sh Tests/Linux/Build-LinuxABI.sh
sh Tests/Linux/Run-LinuxABIAcceptance.sh
FPC_EXE=/usr/local/bin/fpc HPDF_LINUX_OUTPUT=Tests/Linux/bin/linux-abi331 sh Tests/Linux/Run-LinuxABIAcceptance.sh

Użyj natywnego FPC 3.2.2 albo nowszego z FCL i paszlib, kompilatora C, binutils, Fontconfig i zainstalowanych fontów TrueType; środowisko Python akceptacji potrzebuje też pypdf z jego dostawcą AES, PyMuPDF, Pillow i NumPy

FPC_EXE, HPDF_LINUX_OUTPUT i PYTHON_EXE wybierają lokalizacje narzędzi; domyślne środowisko Python akceptacji to /opt/hotpdf-python/bin/python

FPC normalnie zapisuje anonimowy blok eksportu do odpowiedzi linkera ELF; budowanie nazywa ten blok zamieszczoną w repozytorium mapą symboli przed linkowaniem, bo dodanie drugiego nazwanego skryptu wersji kolidowałoby z blokiem anonimowym

Interfejs publiczny

Dołącz Lib/hotpdf_abi.h dla współdzielonego layoutu rekordów i stałych statusu; hpdf_abi_io_v1_size i hpdf_abi_operation_v1_size raportują rzeczywiste rozmiary rekordów natywnych

Biblioteka Linux eksportuje odkrywanie ABI, odkrywanie możliwości, tworzenie i niszczenie dokumentów, callbacki wczytywania i zapisu, liczenie stron, hpdf_document_execute_json_v1 i punkt wejścia porównania dwóch dokumentów hpdf_document_compare_json_v1

Odkryj bieżące operacje przez hpdf_capabilities_json_to_io zamiast zakładać zestaw operacji Windows

OperationBehavior
infoLiczby stron, pól i podpisanych pól
text.extractTekst stron Unicode w JSON i opcjonalnym wyjściu UTF-8, z opcjonalną tablicą stron od zera
forms.readPełni kwalifikowane nazwy pól, wartości Unicode, kompletne zaznaczenia choice, typy, flagi i maksymalne długości
forms.fillTransakcyjne aktualizacje text, choice, multiselect, checkbox i radio, podpisy push-button, pasujące wyglądy osadzonych fontów i wyjście przyrostowe PDF
annotations.export / annotations.importOgraniczona wymiana XFDF adnotacji z transakcjami dopisywania, dokładnym Unicode, strumieniami binarnymi, referencjami popup/reply, szyfrowaniem i uwierzytelnioną polityką certyfikacji
forms.export / forms.importOgraniczona wymiana skalarnych i rich FDF/XFDF z czterema rzeczywistymi stylami na wybraną skonfigurowaną rodzinę rich, transakcjami zaszyfrowanych PDF, zregenerowanymi wyglądami, politykami podpisów i synchronicznymi fragmentowanymi callbackami
renderWyjście PNG Cairo ze stroną, dpi, użyciem widoku albo druku, opcjami adnotacji i domyślną konfiguracją optional-content
signPrzyrostowe podpisywanie PEM albo PFX, istniejące albo nowo utworzone pola, widoczne wyglądy i certyfikacja, włącznie z uwierzytelnionymi wejściami AES-256 R5/R6 i opcjami digestu, metadanych, profilu i walidowanych dowodów
signatures.verifyRzeczywista weryfikacja CMS, długości podpisanych rewizji, opcjonalne jawne ocenianie zaufania CA i walidacja podpisanych informacji o odwołaniach
html.importNatywne tworzenie dokumentów HTML/CSS z fontami Unicode, paginacją, obrazami, hiperłączami i opcjonalnymi kontrolkami AcroForm
text.drawWidoczny albo niewidoczny tekst stron Unicode z zachowanymi oryginalnymi strumieniami stron i uwierzytelnionymi zaszyfrowanymi rewizjami
ocrRzeczywiste rozpoznawanie Tesseract z ograniczonym czasem życia procesu potomnego, wynikami słów i opcjonalną przeszukiwalną warstwą PDF
pages.importImporty wybranych zasobów stron z niezależnym wejściem źródła i transakcyjnymi aktualizacjami celu
pdfa.convertKonwersja do PDF/A-4 rastrowa albo tekstowo/wektorowa, z opcjonalną naprawą fontów i wymaganiami walidacji wybranego trybu
compare / compare.contractPorównanie dwóch uchwytów page-count, page-text, object-count, rendered-image, strukturalne i pełne, plus porównanie semantyczne umów z przygotowanym wyjściem przeglądu JSON, HTML albo annotated-PDF
{"schemaVersion":1,"type":"render","page":0,"dpi":150,"usage":"print","annotations":false,
 "limits":{"memoryBytes":268435456,"outputBytes":268435456,"pixels":100000000}}

Natywne workflow podpisywania przyjmują jawną tożsamość PEM albo Base64 PFX, opcjonalne nowe pola podpisów i wyglądy Unicode oraz uprawnienia certyfikacji; udane podpisywanie podmienia wczytany kontekst na przygotowaną podpisaną rewizję, podczas gdy nieudane podpisywanie albo publikacja zachowuje oryginalny kontekst

Natywne opcje podpisywania bindują rzeczywisty wybór SHA256, SHA384 albo SHA512, informacje podpisu Unicode, atestację prawną, jawne bajty zaufania, walidowane podpisane dowody odwołań, rzeczywiste presety wyglądów i pochodzenie poświadczeń albo transportu znacznika czasu deklarowane przez aplikację

Opcjonalny stan przeglądarki optional-content dostarcza jawne automatyczne zastosowania użycia View, Print albo Export, zoom, język, kontekst użytkownika i ręczne zaznaczenia lokalne dla operacji przez niezmienione rekordy V1

Operacja render przyjmuje usage: "view" albo usage: "print", domyślnie view; odkryj wybory przez tablicę możliwości renderUsages, z niezmienionymi rekordami callbacków i operacji V1

Flagi screen i druku adnotacji podążają za wybranym użyciem, a annotations: false wycisza adnotacje w obu trybach; pominięcie optionalContent zachowuje statyczną konfigurację domyślną, podczas gdy jawny obiekt aktywuje udokumentowane automatyczne zalecenia i lokalne dla operacji wybory ręczne

Tests/Linux/Run-LinuxABIRenderUsage.sh weryfikuje rzeczywiste piksele PNG dla źródeł jawnych i AES R5/R6, zawartości domyślnie wyłączonej, niepowodzeń callbacków, budżetów, anulowania i odzyskiwania tego samego uchwytu; zobacz Tests/Linux/HeadlessRenderUsage.en-us.md dla zależności fiksatur i opcjonalnego prewygenerowanego katalogu fiksatur

Callbacki i czas życia

Opcje wyglądów formularzy przyjmują tekst Unicode, wartości export albo kompletne tablice zaznaczeń, jawne stany przycisków, ustawienia fontów i transakcyjne limity zasobów

Callbacki odczytu i zapisu mogą zwracać częściowe transfery; udane transfery muszą czynić dodatni postęp i nie mogą przekraczać żądanej liczby

Wszystkie callbacki wykonują się synchronicznie na wątku wywołującego, włącznie z kontrolami anulowania wewnątrz parsowania dokumentów, renderowania i kryptograficznych checkpointów

Wejście callbacka jest kopiowane do wyłącznie utworzonego prywatnego pliku tymczasowego z trybem 0600, więc callbacki wejścia Linux i ich dane użytkownika muszą pozostać poprawne tylko do powrotu wywołania load albo execute

Operacje na współdzielonym uchwycie dokumentu szeregują się wewnętrznie; każde aktywne wywołanie utrzymuje niezależną referencję, więc zniszczenie uchwytu z callbacka postępu unieważnia późniejsze wyszukiwania, pozwalając bieżącemu wywołaniu bezpiecznie skończyć

Nie wykonuj rekurencyjnie innej operacji na tym samym uchwycie z jego callbacka; utrzymuj współdzieloną bibliotekę wczytaną, dopóki wszystkie wywołania nie wrócą i każdy uchwyt nie zostanie zniszczony

Budżety i publikacja

Wejście JSON jest ograniczone do 4 MiB i 64 poziomów zagnieżdżenia i odrzuca niepoprawny UTF-8, zduplikowane składniki, zniekształcone limity numeryczne i ucięcie parametrów Int64-do-Int32

Surowy UTF-8 i eskapy Unicode niosą te same wartości łańcuchów, włącznie ze znakami z płaszczyzny uzupełniającej reprezentowanymi poprawnymi parami surrogatów UTF-16; eskapy niesparowanych surrogatów zawodzą przed mutacją dokumentu albo publikacją binarną

Limity operacji obejmują memoryBytes, outputBytes, resultBytes i pixels; limity dokumentu stosują się tež do wcześniej wczytanych uchwytów, podczas gdy zarządzana pamięć i limity renderowania nie obiecują kapu RSS procesu

Wyjście PDF i PNG jest w pełni przygotowywane i sprawdzane przed rozpoczęciem callbacków wyjścia; callback wyjścia należący do wywołującego może zachować częściowy transfer po własnym niepowodzeniu I/O, ale nieudana publikacja binarna albo wyniku nie zatwierdza edycji formularzy ani nie podmienia wcześniej wczytanego kontekstu

Udane mutacje PDF zatwierdzają przygotowane wyjście jako bieżący dokument i jego prywatny snapshot źródła, więc kolejny import FDF albo XFDF o tych samych wartościach zwraca dokładne zatwierdzone bajty PDF z updated=0, zachowując wcześniejsze wypełnienia formularzy, typowane wyglądy rich, narysowany tekst i zaimportowane strony

Prywatne pliki staging są usuwane przy podmianie albo zniszczeniu kontekstu; udane wyjście przyrostowe formularzy i podpisów zachowuje oryginalny prefiks źródła i politykę szyfrowania

Dowody

Opcjonalna naprawa fontów archiwalnych umożliwia ograniczone podstawianie i osadzanie Ghostscript z rzeczywistą walidacją PDF/A-4 przed callbackami

Natywny PDF przeglądu z adnotacjami dodaje rzeczywiste przygotowane wyjście PDF, podświetlenia Unicode i uwierzytelnione uprawnienia adnotacji P3 do porównania semantycznego

Natywne porównywanie umów dostarcza ograniczone porównanie semantyczne dwóch uchwytów, przegląd HTML Unicode i rzeczywistą geometrię linii źródła

Ogólne natywne porównywanie dokumentów normalizuje grafy obiektów i kodowanie strumieni, porównuje rzeczywiste piksele Cairo z jawnymi progami i zachowuje stan dokumentu oraz budżety publikacji callbacków

Klient akceptacji weryfikuje rzeczywiste layouty nagłówków C i wersjonowane wyszukiwanie symboli, częściowe callbacki, 80 współbieżnych operacji współdzielonego uchwytu, anulowanie, edycje Unicode, rollback i szyfrowane podpisywanie

Niezależne czytniki pypdf, MuPDF i OpenSSL weryfikują rzeczywiste PDF-y, piksele PNG, zachowane hasła, słowniki bezpieczeństwa, ID dokumentów, dokładne przerwy ByteRange, poprawne podpisy i odrzucanie zmodyfikowanych podpisanych bajtów

API dokumentów headless · Renderowanie natywne · Pozostały plan dostarczenia