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
| Operation | Behavior |
|---|---|
info | Liczby stron, pól i podpisanych pól |
text.extract | Tekst stron Unicode w JSON i opcjonalnym wyjściu UTF-8, z opcjonalną tablicą stron od zera |
forms.read | Pełni kwalifikowane nazwy pól, wartości Unicode, kompletne zaznaczenia choice, typy, flagi i maksymalne długości |
forms.fill | Transakcyjne 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.import | Ograniczona wymiana XFDF adnotacji z transakcjami dopisywania, dokładnym Unicode, strumieniami binarnymi, referencjami popup/reply, szyfrowaniem i uwierzytelnioną polityką certyfikacji |
forms.export / forms.import | Ograniczona 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 |
render | Wyjście PNG Cairo ze stroną, dpi, użyciem widoku albo druku, opcjami adnotacji i domyślną konfiguracją optional-content |
sign | Przyrostowe 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.verify | Rzeczywista weryfikacja CMS, długości podpisanych rewizji, opcjonalne jawne ocenianie zaufania CA i walidacja podpisanych informacji o odwołaniach |
html.import | Natywne tworzenie dokumentów HTML/CSS z fontami Unicode, paginacją, obrazami, hiperłączami i opcjonalnymi kontrolkami AcroForm |
text.draw | Widoczny albo niewidoczny tekst stron Unicode z zachowanymi oryginalnymi strumieniami stron i uwierzytelnionymi zaszyfrowanymi rewizjami |
ocr | Rzeczywiste rozpoznawanie Tesseract z ograniczonym czasem życia procesu potomnego, wynikami słów i opcjonalną przeszukiwalną warstwą PDF |
pages.import | Importy wybranych zasobów stron z niezależnym wejściem źródła i transakcyjnymi aktualizacjami celu |
pdfa.convert | Konwersja do PDF/A-4 rastrowa albo tekstowo/wektorowa, z opcjonalną naprawą fontów i wymaganiami walidacji wybranego trybu |
compare / compare.contract | Poró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