HotPDF 2.200.2 dla Delphi i C++Builder

Natywne generowanie, edytowanie, podpisywanie PDF, dane wyjściowe zgodne ze standardami, optymalizacja czcionek i obrazowanie dla aplikacji RAD Studio

HotPDF umożliwia aplikacjom VCL tworzenie, modyfikowanie, zabezpieczanie, podpisywanie, optymalizowanie, importowanie, kompresowanie i zapisywanie dokumentów PDF bezpośrednio z kodu Delphi lub C++Builder, bez wdrażania zewnętrznego środowiska uruchomieniowego PDF

Przegląd projektu

HotPDF to biblioteka komponentów PDF na poziomie kodu źródłowego dla Delphi i C++Builder. Została stworzona dla oprogramowania desktopowego, które wymaga deterministycznych danych wyjściowych PDF, bezpośredniego rysowania stron, silnej integracji z RAD Studio oraz kompaktowego wdrażania

Komponent obejmuje codzienne generowanie PDF, zaawansowane składanie dokumentów, edycję PDF, wyjście bogate w obrazy, formularze, adnotacje, szyfrowanie, przepływy pracy podpisywania, optymalizację czcionek oraz przepływy pracy oparte na strumieniach z poziomu jednego natywnego interfejsu API

Ostatnie wydania biblioteki rozszerzyły HotPDF z klasycznego edytora PDF do szerszego natywnego zestawu narzędzi PDF, obejmującego bramkowanie funkcji specyficznych dla wersji PDF 1.3 / 1.4 / 1.5 / 1.6 / 1.7, wybrane szyfrowanie PDF 2.0, zgodność ze standardami PDF/A-1 / -2 / -3 + PDF/X-1a / -3 / -4 + PDF/UA-1, podpisy cyfrowe PAdES baseline / extended / long-term-validation, potok podpisywania PFX / PKCS#12 w ramach procesu, który nie zależy od OpenSSL ani zewnętrznych plików binarnych, zapisywanie aktualizacji przyrostowych, tworzenie podzbiorów czcionek CFF / OpenType / CID-keyed CFF oraz adaptery eksportu PDF dla FastReport, QuickReport, ReportBuilder i DevExpress ExpressPrinting, które kierują istniejące raporty przez HotPDF jako pojedynczy backend PDF. Interfejs API Direct File przetwarza wielogigabajtowe pliki PDF z milionami obiektów z pliku do pliku - licznik stron, kopie, przepisywanie informacji o dokumencie oraz szyfrowanie lub deszyfrowanie AES-256 - w kilka sekund, a moduł ładujący odzyskuje teraz również dokumenty opakowane w kontenery transportowe z nieaktualnymi przesunięciami oraz pliki aktualizowane przyrostowo z osieroconymi lub zastąpionymi obiektami

Cykl v2.119.32-51 dodał po stronie producenta kształtowanie znaków arabskich / perskich / urdu (obowiązkowa ligatura LAM-ALEF, 9 liter Arabic Presentation Forms-A), kompletny silnik substytucji OpenType GSUB obejmujący każdy LookupType 1-8 z wyborem Script / LangSys i zamknięciem podzbioru TTF dla glifów zastępczych, obsługę kontenerów XFA (XML Forms Architecture) (AddXFAPacket / ClearXFAPackets / XFAPacketCount), rodzinę wyzwalaczy pól formularza AcroForm /AA /K + /F + /V + /C, rejestrację czcionek multi-Unicode /DR za pomocą RegisterAcroFormFont, ustawienia atrybutów dostępności elementów struktury (/Lang / /E / /T) z wyliczeniem standardowego typu struktury Table 333 i typowanym przeciążeniem AddStructureElement oraz właściwości sekwencji zawartości oznaczonych w BeginTaggedContent

Cykl v2.119.52-68 zamknął automatyczny potok kształtowania Phase 8 i rozszerzył zakres obsługiwanych pism: Arabic Extended-A (w tym U+0750-077F Arabic Supplement oraz U+08A0-08FF Arabic Extended-A) oraz perski / urdu Form-B zostały rozszerzone do pełnej tabeli klas łączenia U+0672-06D5 plus 26 nowych mapowań Forms-A, z późniejszym składaniem dla LAM-ALEF, par YEH-HAMZA + samogłoska (8 ligatur w U+FBEA-FBFB), samodzielnej ligatury Allah (U+FDF2) i 22-kodowej frazy Bismillah (U+FDFD). Nowa opcjonalna właściwość ShapingFeatures + wyliczenie THPDFShapingFeature (sfArabicGSUB / sfStandardLigatures / sfContextualLigatures / sfContextualAlternates / sfIndicShaping) sprawia, że producent automatycznie emituje specyficzne dla czcionki podstawienia rlig / liga / clig / rclt oparte na GSUB, przy czym standardowe ligatury łacińskie (ff / fi / fl / ffi / ffl / ſt / st przez U+FB00-FB06) oraz reorganizacja sylab Devanagari Indic (Repha + pre-base I-matra) dołączają do tego samego potoku. Nowe metody możliwości kształtowania dla pisma syryjskiego (GetSyriacJoiningClass / GetSyriacPosition), mongolskiego (GetMongolianJoiningClass / GetMongolianPosition) oraz Devanagari (GetDevanagariCategory / ApplyDevanagariReorder) pozwalają wywołującym kierować skomplikowane pisma niearabskie przez ten sam silnik GSUB. GetCodepointAdvance udostępnia buforowaną ułamek em /W do obliczeń zawijania, a AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID pozwalają producentowi emitować dowolny glif zastępczy GID z GSUB (kształty klastrów Devanagari, alternatywy stylistyczne, sekwencje wariantów CJK) za pomocą punktów kodowych Private-Use-Area z pełną integracją /CIDToGIDMap + /ToUnicode + /W. Zbiorcza mapa ToUnicode CMap zawiera teraz 35 wpisów odwrotnego mapowania ligatur (8 z rodziny LAM-ALEF + 18 z rodziny YEH-HAMZA + 1 Allah + 1 Bismillah + 7 łacińskich), dzięki czemu kopiowanie/wklejanie w czytniku generuje źródłowe punkty kodowe. Szkielety dokumentacji dla ChangeLog są teraz dostarczane w 11 językach (EN / CN / AR / DE / ES / FR / IT / JA / KO / PT / RU) z interfejsem wyboru języka; limit retencji ChangeLog został zwiększony z 250 do 500 sekcji wersji

Cykl v2.152-v2.190 rozbudował kompletny silnik pozycjonowania OpenType GPOS i rozszerzył zakres obsługi skomplikowanych pism. Opcjonalne opcje kształtowania stosują teraz własny kerning czcionki (parzysty, kontekstowy i od prawej do lewej), rozmieszczanie znaków łączących (znak-do-bazy, znak-do-znaku oraz znak-do-ligatury na komponent), kotwice połączeń pisma łączonego oraz kerning pionowy dla tekstu pionowego, wszystko zapisane jako standardowe operatory tekstowe PDF, dzięki czemu każdy czytnik renderuje ten sam wynik. Kształtowanie po stronie producenta obejmuje teraz pismo arabskie (w tym bloki Supplement, Extended-A i Extended-B), syryjskie, mongolskie, N'Ko, Adlam, Hanifi Rohingya, układanie spółgłosek tybetańskich, Devanagari i inne pisma indyjskie poprzez łańcuch cech Indic czcionki, jawajskie, porządkowanie znaków tajskich i laotańskich, porządkowanie punktów samogłoskowych hebrajskich, khmerskie, birmańskie, Tai Viet oraz Meetei Mayek. Rodzina opcjonalnych funkcji typograficznych OpenType - ligatury standardowe, uznaniowe i historyczne, kapitaliki, cyfry tekstowe / wersalikowe / proporcjonalne / tabelaryczne, indeksy górne, indeksy dolne, liczebniki porządne, ułamki, indeksy dolne naukowe, liczniki, mianowniki, alternatywy stylistyczne i kontekstowe, formy zlokalizowane, formy wrażliwe na wielkość liter, przekreślone zero i alternatywy pionowe - może być stosowana automatycznie podczas wyprowadzania tekstu. Kopiowanie, wklejanie i wyszukiwanie tekstu odzyskują oryginalne znaki we wszystkich kształtowanych danych wyjściowych, w tym w ligaturach i łańcuchowych substytucjach cech. Dane wyjściowe czcionek stały się również mniejsze: osadzone programy czcionek są zawsze kompresowane algorytmem Flate, czcionka używana na kilku stronach jest osadzana raz na dokument, tagi podzbiorów są generowane deterministycznie dla powtarzalnych danych wyjściowych, a opcjonalny tryb kompaktowy zapisuje zwykły tekst ASCII przy użyciu standardowych czcionek jako nieosadzony tekst WinAnsi

Zakres standardów PDF

HotPDF zawiera specyficzną dla wersji obsługę praktycznych funkcji tworzenia PDF 1.3, PDF 1.4, PDF 1.5, PDF 1.6 i PDF 1.7, używanych przez aplikacje biznesowe, obrazowania, wydawnicze oraz automatyzacji dokumentów. Publiczne interfejsy API są sprawdzane pod kątem wybranej wersji PDF, dzięki czemu generowane pliki unikają nowszych wpisów, gdy wymagana jest ścisła kompatybilność

Bieżąca matryca obejmuje filtry i predyktory, strumienie XRef, łańcuchy aktualizacji przyrostowych, szyfrowanie AES, zabezpieczenia kluczem publicznym, kolory DeviceCMYK i ICCBased, wzorce kafelków, cieniowania osiowe/promieniowe/wielostopniowe, obrazy wbudowane, warstwy, grupy przezroczystości, przejścia stron, adnotacje, widżety AcroForm, zewnętrzne haki podpisywania, metadane XMP, otagowane drzewa struktury PDF, OutputIntents, produkcyjne ramki stron, ViewerPreferences, UserUnit, kolejność Tabs oraz osadzanie/tworzenie podzbiorów czcionek dla czcionek TrueType, Type 3, CFF, OpenType-CFF i CID-keyed CFF

Jest to szeroki zakres obsługi standardów dla obsługiwanego obszaru tworzenia HotPDF, a nie ogólne twierdzenie, że każdy przypadek brzegowy w ISO 32000-1 został zaimplementowany

Dlaczego warto wybrać HotPDF

Natywne dopasowanie do RAD Studio

Używaj znanych projektów, pakietów, strumieni, formularzy i wzorców rysowania Delphi i C++Builder zamiast opakowywać oddzielny silnik PDF

Nowoczesne funkcje PDF

Buduj pliki PDF z formularzami, adnotacjami, warstwami, przezroczystością, przejściami stron, otagowaną strukturą, szyfrowaniem, symbolami zastępczymi podpisów i aktualizacjami przyrostowymi

Kompaktowe i szybkie dane wyjściowe

Zmniejsz rozmiar PDF dzięki kompresji zlib-ng, obrazowaniu libjpeg-turbo, podzbiorom TrueType, podzbiorom OpenType-CFF oraz obsłudze CID-keyed CFF dla dużych czcionek CJK

Przewagi konkurencyjne

Poniższe możliwości stanowią wyraźne różnice techniczne dla HotPDF w porównaniu z typowymi komponentami Delphi PDF. Większość konkurencyjnych komponentów komercyjnych albo w ogóle nie ma tych funkcji, albo są one znacznie słabsze w środowisku produkcyjnym. Każdy wiersz odpowiada weryfikowalnej implementacji i publicznemu interfejsowi API wewnątrz biblioteki

Kompletne kształtowanie i pozycjonowanie OpenType

Pełny silnik substytucji GSUB obejmujący każdy LookupType 1-8 (Single, Multiple, Alternate, Ligature, Contextual, Chained Contextual, Extension, Reverse Chained Contextual), sparowany z silnikiem pozycjonowania GPOS obejmującym wszystkie 9 LookupTypes (kerning parzysty / pojedynczy / kontekstowy, mark-to-base, mark-to-mark, mark-to-ligature na komponent ligatury, cursive attachment, odległość, pionowe vkrn/vpal). Całe pozycjonowanie jest emitowane za pomocą standardowych operatorów tekstowych PDF, dzięki czemu każdy czytnik renderuje identycznie

Kształtowanie skomplikowanych pism po stronie producenta

Ponad 20 pism kształtowanych po stronie producenta, sterowanych przez własny łańcuch cech GSUB czcionki: arabski (w tym Supplement / Extended-A / Extended-B), syryjski, mongolski, N'Ko, Adlam, Hanifi Rohingya, układanie tybetańskie, Devanagari i rodzina indyjska, jawajski, porządkowanie znaków tajskich / laotańskich, porządkowanie samogłosek hebrajskich, khmerski, birmański, Tai Viet, Meetei Mayek. Dane wyjściowe zawierają pełne odwrotne mapowanie /ToUnicode, dzięki czemu kopiowanie/wklejanie odzyskuje oryginalne punkty kodowe

Stos podpisywania w ramach procesu, zero zewnętrznych zależności

Rozpakowywanie ASN.1, RSA, AES, PKCS#12 oraz CMS SignedData (RFC 5652) są zaimplementowane wewnątrz HotPDF. SignPDFWithPFX podpisuje zastępczy plik PDF w jednym wywołaniu bez środowiska uruchomieniowego OpenSSL i bez platformowego dostawcy kryptograficznego - cały łańcuch podpisywania znajduje się w Twoim procesie, jest powtarzalny, kontrolowalny i nie wymaga wdrażania żadnych natywnych plików binarnych

Długoterminowa weryfikacja PAdES, od początku do końca

Przepływy pracy PAdES B-B, B-T, B-LT i B-LTA są w pełni objęte obsługą: znaczniki czasu RFC 3161, słowniki długoterminowej weryfikacji DSS / VRI, podpisy znaczników czasu dokumentów, ograniczenia wartości początkowych (Seed Value) oraz XAdES-in-PDF. Jest to rygorystyczny wymóg dla podpisów elektronicznych zgodnych z unijnym rozporządzeniem eIDAS, podczas gdy większość konkurencyjnych komponentów kończy na podstawowym podpisywaniu CMS

Zgodność na trzech osiach + weryfikacja wstępna (Preflight)

Niezależne bramkowanie profili dla PDF/A-1/-2/-3, PDF/X-1a/-3/-4 oraz PDF/UA-1 jednocześnie - wywołania niezgodne wywołują wyjątki diagnostyczne zamiast cichego zapisywania niezgodnych plików PDF. CreatePreflightReport generuje raporty tekstowe / JSON / HTML / CSV z profilami INI, wbudowanymi ustawieniami wstępnymi, agregacją wsadową i osadzaniem dowodów XMP, zweryfikowane od początku do końca z veraPDF

Interfejs API Direct File dla wielogigabajtowych plików

Działa na pliku PDF na dysku bez budowania wykresu obiektów w pamięci. Na dokumencie o rozmiarze 2 GB z 1,67 miliona obiektów: szyfrowanie AES-256 ~14 s, deszyfrowanie ~16 s, pełne przepisanie ~6 s; odczytanie liczby stron dokumentu 1,25 GB zajmuje milisekundy. Klasyczne tabele xref, strumienie XRef, pliki o referencjach hybrydowych i dokumenty aktualizowane przyrostowo pozostają na bezpośredniej ścieżce

Podzbiory CFF / OpenType-CFF / CID

Czcionki TrueType, OpenType-CFF i CID-keyed CFF mogą być dzielone na podzbiory z zachowaniem identyfikatorów glifów dla tekstu Type0 / Identity-H. Dokumenty CJK, które wcześniej osadzały programy CID-keyed CFF o rozmiarze 14 MB, teraz zajmują od 500 KB do 2 MB bez utraty wyrenderowanych glifów; wbudowane programy czcionek są zawsze kompresowane algorytmem Flate, czcionki wielostronicowe są osadzane raz na dokument, a tagi podzbiorów są deterministyczne w celu uzyskania powtarzalnych wyników

Ujednolicona fasada rejestrowania w czasie rzeczywistym

THPDFLogger + globalny HPDFLog oferują przełączalną w czasie rzeczywistym fasadę diagnostyczną: filtrowanie ważności błędów / ostrzeżeń / informacji / debugowania, jednoczesne cele zapisu do pliku + OutputDebugString + konsoli, bezpieczeństwo wątków, pojedyncza kopia zapasowa 10 MB z rotacją, wyłączona szybka ścieżka o zerowym narzucie. Metoda LoadFromFile, raporty weryfikacji wstępnej (preflight) oraz ścieżka awaryjna strumienia obiektów są już powiązane ze strukturalną diagnostyką, którą można przełączać w czasie rzeczywistym bez ponownej kompilacji - możliwość operacyjna, której brakuje większości konkurencyjnych komponentów

Cztery adaptery silników raportów

Wymienne backendy PDF dla FastReport (TfrxHotPDFExport), QuickReport (TQRHotPDFExportFilter), ReportBuilder (TppHotPDFDevice) i DevExpress ExpressPrinting (obejmujące cxGrid / cxRichEdit / cxScheduler / cxPivotGrid). Istniejące układy raportów nadal działają - zmieniany jest tylko emiter PDF

Są to gotowe i dostarczone możliwości, a nie obietnice na przyszłość. Każdy z powyższych elementów jest zaimplementowany w obecnej bibliotece, kompiluje się bez błędów i przechodzi testy DUnitX oraz weryfikację veraPDF od początku do końca. Oceniając konkurencyjne komponenty, poproś o dowód pełnego pokrycia GSUB/GPOS LookupType, łańcucha PAdES B-LTA działającego w ramach procesu oraz zmierzonej przepustowości szyfrowania wielogigabajtowego

Korzyści dla programistów

  • Integracja oparta na kodzie źródłowym pozwala zachować kontrolę nad debugowaniem i wdrażaniem
  • Wspólne przykłady dla Delphi i C++Builder ułatwiają weryfikację zachowania w obu stosach językowych
  • Statyczna integracja zewnętrznych bibliotek C sprawia, że zależności dotyczące kompresji i obrazowania są powtarzalne
  • Skoncentrowane pomocnicze interfejsy API obejmują filtry PDF, FlateDecode, LZW, CCITT, maski obrazów, kody kreskowe, podzbiory czcionek i przepływy pracy z zawartością stron
  • Bramki wersji PDF mogą automatycznie podnosić wersję wyjściową lub wymuszać ścisłą zgodność z wersjami PDF 1.3/1.4/1.5/1.6/1.7 poprzez StrictVersionLock
  • Gotowe do użycia projekty pakietów Delphi i C++Builder obejmują obecne generacje RAD Studio, w tym 13.1 Florence

Najważniejsze nowości w bibliotece

Interfejs API Direct File dla wielogigabajtowych plików

Rodzina DAOpenFileReadOnly / DACopyFile / DASetDocumentInfo / DASaveAsFile oraz wywołania typu plik-do-pliku EncryptFile / DecryptFile działają bezpośrednio na pliku PDF zamiast budować wykres obiektów w pamięci. Na dokumencie testowym o rozmiarze 2 GB z 1,67 miliona obiektów szyfrowanie AES-256 zajmuje około 14 sekund, deszyfrowanie około 16 sekund, a pełne przepisanie około 6 sekund; otwarcie dokumentu o rozmiarze 1,25 GB w celu pobrania liczby stron zajmuje milisekundy. Klasyczne tabele, strumienie odsyłaczy, pliki referencji hybrydowych i dokumenty aktualizowane przyrostowo pozostają na bezpośredniej ścieżce

Raporty weryfikacji wstępnej (Preflight)

CreatePreflightReport oraz CreatePreflightReportWithProfile audytują plik PDF pod kątem obsługiwanych testów PDF/A, PDF/X i PDF/UA i generują raporty tekstowe, JSON, HTML lub CSV, z profilami w stylu INI w celu ukrycia zaakceptowanych ustaleń - gotowe do bramek CI i masowego pobierania dokumentów. Przykładowa aplikacja PreflightCLI dodaje rekurencyjne uruchamianie w folderach i zagregowane pulpity nawigacyjne

Zestaw narzędzi do formularzy wczytanych dokumentów

HasFormFields i FormFieldExists odpowiadają na pytania dotyczące formularzy we wczytanym pliku PDF przed jego modyfikacją, wartości pól mogą być odczytywane i zapisywane według indeksu lub nazwy, a FlattenFormFields wtapia interaktywne pola AcroForm w zawartość strony i zgłasza, ile pól spłaszczyło - wraz ze spłaszczaniem XFA do AcroForm, które sprawia, że formularze XFA nadają się do użytku w dowolnym czytniku

Podpisywanie PFX / PKCS#12 w ramach procesu

THotPDF.SignPDFWithPFX(InputPDF, OutputPDF, PFXFile, Password) podpisuje istniejący zastępczy plik PDF w jednym wywołaniu. Pełny stos ASN.1, RSA, AES, PKCS#12 i CMS SignedData (RFC 5652) jest zaimplementowany wewnątrz HotPDF, więc środowisko uruchomieniowe OpenSSL ani platformowy dostawca kryptografii nie są wymagane

Długoterminowa weryfikacja PAdES

Przepływy pracy PAdES B-B, B-T, B-LT i B-LTA są obsługiwane od początku do końca: tworzenie podpisów ze znacznikami czasu RFC 3161, słowniki długoterminowej weryfikacji DSS / VRI, podpisy znaczników czasu dokumentów oraz ograniczenia wartości początkowych (Seed Value). Wymuszanie wartości początkowych podpisów oraz XAdES-in-PDF stanowią część tego samego obszaru

Zgodność z PDF/A, PDF/X i PDF/UA

HotPDF bramkuje metody funkcji w stosunku do profili PDF/A-1 / -2 / -3, PDF/X-1a / -3 / -4 oraz PDF/UA-1. Wywołania, które naruszyłyby wybrany profil (przezroczystość w PDF/A-1, JavaScript w PDF/A, zewnętrzne adnotacje w PDF/X, brak tagowania struktury w PDF/UA), zgłaszają wyjątki diagnostyczne zamiast cichego generowania niezgodnych plików PDF

Adaptery zewnętrznych silników raportów

Bezpośrednie backendy PDF dla czterech najpopularniejszych silników raportów Delphi: TfrxHotPDFExport (FastReport 4 / FastReport VCL), TQRHotPDFExportFilter (QuickReport), TppHotPDFDevice (ReportBuilder) oraz dxHotPDFExportReportLinkToFile/Stream (system ExpressPrinting DevExpress obejmujący cxGrid / cxRichEdit / cxScheduler / cxPivotGrid). Istniejące raporty nadal działają - zmieniany jest tylko emiter PDF

Silnik pozycjonowania OpenType GPOS

Opcjonalne pozycjonowanie tekstu oparte na własnych danych GPOS czcionki: kerning parzysty i kontekstowy dla tekstu od lewej do prawej i od prawej do lewej, pozycjonowanie znak-do-bazy, znak-do-znaku oraz znak na komponent ligatury, wyrównanie wejścia/wyjścia pisma łączonego, pozycjonowanie odległości i pionowy kerning dla czcionek pionowych. Pozycjonowanie jest emitowane za pomocą standardowych operatorów tekstowych PDF, dzięki czemu każdy czytnik PDF renderuje ten sam wynik

Zakres kształtowania skomplikowanych pism

Kształtowanie po stronie producenta renderuje poprawnie połączony i uporządkowany tekst dla pisma arabskiego (w tym bloków Supplement, Extended-A i Extended-B), syryjskiego, mongolskiego, N'Ko, Adlam, Hanifi Rohingya, tybetańskiego, Devanagari i innych pism indyjskich, jawajskiego, tajskiego, laotańskiego, hebrajskiego, khmerskiego, birmańskiego, Tai Viet oraz Meetei Mayek bez polegania na shaperze po stronie przeglądarki. Każde pismo jest opcjonalnym przełącznikiem, więc istniejące dane wyjściowe pozostają identyczne pod względem bajtów do momentu włączenia, a kopiowanie/wklejanie odzyskuje oryginalne znaki

Automatyczne funkcje typograficzne OpenType

Opcjonalne przełączniki kształtowania stosują standardowe, uznaniowe i historyczne ligatury czcionki, kapitaliki, cyfry tekstowe / wersalikowe / proporcjonalne / tabelaryczne, indeksy górne, indeksy dolne, liczebniki porządkowe, ułamki, indeksy dolne naukowe, liczniki, mianowniki, alternatywy stylistyczne i kontekstowe, formy zlokalizowane, formy wrażliwe na wielkość liter, przekreślone zero oraz alternatywy pionowe automatycznie podczas wyprowadzania tekstu, przy czym wyodrębnianie tekstu jest mapowane z powrotem na znaki źródłowe

Kompaktowe dane wyjściowe czcionek

Osadzone programy czcionek są zawsze kompresowane algorytmem Flate, czcionka używana na kilku stronach jest osadzana raz dla całego dokumentu, a tagi podzbiorów są generowane deterministycznie z faktycznie używanych glifów, dzięki czemu powtarzające się uruchomienia dają identyczne wyniki. Opcjonalny tryb zapisuje zwykły tekst ASCII ze standardowymi czcionkami jako kompaktowy nieosadzony tekst WinAnsi, zmniejszając stronę zwykłego tekstu z setek kilabajtów do zaledwie kilku kilabajtów

Kształtowanie wielu pism po stronie producenta

Kształtowanie po stronie producenta składa ciągi wejściowe Unicode do ich form prezentacyjnych przed emisją tekstu PDF. Pismo arabskie obejmuje pełną tabelę klas łączenia U+0672-06D5 plus ponad 40 mapowań Forms-A, z automatycznym przebiegiem ligatur dla LAM-ALEF, YEH-HAMZA + samogłoski (U+FBEA-FBFB), Allah (U+FDF2) i Bismillah (U+FDFD). Obszary możliwości dla pisma syryjskiego (GetSyriacJoiningClass), mongolskiego (GetMongolianJoiningClass) oraz Devanagari (GetDevanagariCategory / ApplyDevanagariReorder) pozwalają wywołującym kierować niearabskie skomplikowane pisma przez ten sam silnik GSUB

Automatyczny potok kształtowania (Phase 8)

Opcjonalna właściwość ShapingFeatures + wyliczenie THPDFShapingFeature (sfArabicGSUB / sfCursiveAttachment / sfStandardLigatures / sfContextualLigatures / sfContextualAlternates / sfIndicShaping) podnosi silniki OpenType GSUB i GPOS do poziomu automatycznego potoku po stronie producenta. Natywne arabskie formy init / medi / fina / isol, rlig, calt, rclt, połączenie pisma łączonego GPOS, łacińskie liga / clig oraz reorganizacja Devanagari Indic następują w miarę emitowania tekstu, z pełnym odwrotnym mapowaniem /ToUnicode w celu poprawnego kopiowania/wklejania

Standardowe ligatury łacińskie + syntetyczny punkt kodowy PUA

Standardowe ligatury łacińskie (ff / fi / fl / ffi / ffl / ſt / st przez U+FB00-FB06) są emitowane automatycznie przez ApplyLatinLigatureRefinement, gdy włączona jest funkcja sfStandardLigatures. Dla substytutów GID w GSUB bez naturalnego punktu kodowego Unicode - kształty klastrów Devanagari, alternatywy stylistyczne, sekwencje wariantów ideograficznych CJK - metoda AssignSyntheticCodepointForGID przydziela punkt kodowy z obszaru Private-Use-Area (U+E000-F8FF) z lustrzaną integracją /CIDToGIDMap + /W + /ToUnicode

Silnik substytucji OpenType GSUB

Każdy OpenType GSUB LookupType 1-8 (Single, Multiple, Alternate, Ligature, Contextual, Chained Contextual, Extension, Reverse Chained Contextual) jest zaimplementowany jako obszar zapytań służący wyłącznie do sprawdzania możliwości (GetSingleSubstituteGlyph, ApplyLigatureSubstitution, ApplyContextualSubst, ApplyReverseChainedContextualSubst oraz funkcje pomocnicze Multiple / Alternate / Script / LangSys / Feature). Metoda MarkUnicodeGlyphUsed wciąga każdy glif zastępczy do subsettera TTF, dzięki czemu osadzone podzbiory czcionek pozostają samowystarczalne

Formularze XFA + wyzwalacze AcroForm + Unicode /DR

Pakiety kontenerów XFA (PDF 1.7 §12.7.6 / §12.7.8) są przesyłane obok (lub zamiast) statycznych pól /Fields za pomocą AddXFAPacket. Pełna rodzina wyzwalaczy pól formularza AcroForm (/AA /K Keystroke, /F Format, /V Validate, /C Calculate) jest udostępniana jako metody opakowujące, a RegisterAcroFormFont wiąże wiele czcionek Unicode z jednym słownikiem zasobów AcroForm /DR dla wielojęzycznych widżetów formularzy

Podzbiory czcionek i pliki PDF CJK

THotPDF.EnableFontSubsetting tworzy podzbiory czcionek TrueType, OpenType-CFF i CID-keyed CFF, zachowując identyfikatory glifów dla tekstu Type0 / Identity-H. Pliki PDF CJK, które wcześniej osadzały programy CID-keyed CFF o rozmiarze 14 MB, teraz zajmują od 500 KB do 2 MB bez utraty wyrenderowanych glifów

Zapis przyrostowy z wieloma podpisami

Metody BeginIncrementalUpdate, SaveIncrementalUpdate, MarkDirty oraz interfejsy API symboli zastępczych podpisu obsługują aktualizacje PDF typu append-only i przepływy pracy z wieloma podpisami bez ponownego zapisywania wcześniej podpisanych zakresów bajtów

Obsługa zaawansowanych funkcji PDF

  • Bramki API specyficzne dla wersji PDF 1.3 / 1.4 / 1.5 / 1.6 / 1.7 + wybrane PDF 2.0 dla Catalog, ViewerPreferences, adnotacji, JavaScript, czcionek Type0, map ToUnicode, przezroczystości, warstw i szyfrowania
  • Bramki zgodności z PDF/A-1 / -2 / -3, PDF/X-1a / -3 / -4 oraz PDF/UA-1, które odrzucają wywołania funkcji niezgodnych z profilem zamiast cichego naruszania profilu
  • Otagowane drzewa struktury PDF z mapami ról, StructParents, wyjściem ParentTree oraz elementami struktury dla przepływów pracy zorientowanych na dostępność
  • Referencje OutputIntents, profili ICC, ramek stron, obracania, UserUnit, kolejności Tabs, wzorców kafelków, alfa ExtGState, trybów mieszania, półtonów (Type 1 / 5 / 6 / 10 / 16), funkcji transferu oraz funkcji generowania czerni / usuwania podkoloru (black-generation / under-color-removal)
  • Obrazy wbudowane, gradienty osiowe wielostopniowe, gradienty promieniowe, siatki trójkątów cieniowane metodą Gourauda (free-form / lattice-form), siatki łat Coonsa i łat tensorowych, obrazy z maskami miękkimi (soft-mask) dla przezroczystości alfa na piksel w stylu PNG oraz wypełnienia wzorcami wielokrotnego użytku
  • Nazwane miejsca docelowe, miniatury stron, stylizacja konspektu na poziomie strony (kolor, pogrubienie, kursywa), nazwany rejestr JavaScript na poziomie dokumentu oraz pełna rodzina dodatków Line / PolyLine / Polygon (podpis, zakończenia linii, cel, efekt obramowania)
  • Kształtowanie znaków arabskich po stronie producenta obejmuje pełną tabelę klas łączenia U+0672-06D5 plus ponad 40 statycznych mapowań Arabic Presentation Forms-A, z późniejszym składaniem ligatur dla LAM-ALEF, par YEH-HAMZA + samogłoska (U+FBEA-FBFB), ligatury Allah (U+FDF2) i frazy Bismillah (U+FDFD)
  • Obszary możliwości kształtowania wielu pism: syryjskiego (GetSyriacJoiningClass / GetSyriacPosition), mongolskiego (GetMongolianJoiningClass / GetMongolianPosition), Devanagari (GetDevanagariCategory / ApplyDevanagariReorder) - kierują tym samym silnikiem GSUB dla skomplikowanych pism niearabskich
  • Automatyczny potok kształtowania Phase 8 napędzany opcjonalną właściwością ShapingFeatures: sfArabicGSUB stosuje natywne arabskie formy init / medi / fina / isol oraz rlig / calt / rclt w celu emisji specyficznych dla czcionki kontekstowych identyfikatorów glifów, sfCursiveAttachment stosuje kotwice połączeń pisma łączonego GPOS, sfStandardLigatures / sfContextualLigatures emitują łacińskie liga / clig (FB00-FB06: ff / fi / fl / ffi / ffl / ſt / st), a sfIndicShaping reorganizuje klastry Devanagari (Repha + pre-base I-matra) przed emisją
  • Kompletny silnik substytucji OpenType GSUB (LookupType 1-8) z wyborem Script / LangSys, zamknięciem subsettera TTF (MarkUnicodeGlyphUsed), obsługą formatu Cmap 12 SMP, analizowaniem GDEF, automatyczną emisją ToUnicode CMap z 35 wpisami odwrotnego mapowania ligatur oraz wyszukiwaniem GetUnicodeGlyphForCodepoint dla wywołujących kierujących emisją glif po glifie
  • Emisja syntetycznych punktów kodowych PUA (AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID) pozwala producentom emitować dowolne glify zastępcze GID z GSUB (kształty klastrów Devanagari, warianty stylistyczne, sekwencje wariantów ideograficznych CJK) przez obszar Private Use Area U+E000-F8FF z lustrzaną integracją /CIDToGIDMap + /W. Metoda GetCodepointAdvance udostępnia buforowaną ułamek em /W do obliczeń zawijania
  • Silnik pozycjonowania OpenType GPOS za opcjonalnymi przełącznikami kształtowania: kerning parzysty, pojedynczy i kontekstowy (Context / Chained Context) zarówno dla tekstu od lewej do prawej, jak i od prawej do lewej, rozmieszczanie znak-do-bazy / znak-do-znaku / znak-do-ligatury z dokładnością do komponentu na ligaturach, połączenie wejścia-wyjścia pisma łączonego, pozycjonowanie odległości oraz kerning pionowy vkrn / vpal stosowany do pionowego wyjścia tekstowego
  • Kształtowanie skomplikowanych pism po stronie producenta dla arabskiego Supplement / Extended-A / Extended-B, syryjskiego, mongolskiego, N'Ko, Adlam, Hanifi Rohingya, układania tybetańskiego, rodziny pism indyjskich przez łańcuch cech Indic czcionki, jawajskiego, porządkowania znaków tajskich / laotańskich, porządkowania punktów samogłoskowych hebrajskich, khmerskiego, birmańskiego, Tai Viet oraz Meetei Mayek, każdy za własnym opcjonalnym przełącznikiem z odwrotnym mapowaniem ToUnicode dla kopiowania/wklejania
  • Automatyczne funkcje typograficzne OpenType podczas wyprowadzania tekstu: ligatury liga / clig / dlig / hlig, kapitaliki smcp / c2sc, style cyfr onum / lnum / pnum / tnum, sups / subs / ordn / frac / sinf / numr / dnom, alternatywy stylistyczne salt, alternatywy kontekstowe calt / rclt, formy zlokalizowane locl, formy case, przekreślone zero zero oraz alternatywy pionowe vert / vrt2, z łańcuchowymi substytucjami rozwiniętymi z powrotem do tekstu źródłowego w ToUnicode CMap
  • Optymalizacja osadzania czcionek: zawsze kompresowane wbudowane programy czcionek, jedna osadzona kopia na dokument dla czcionek używanych na kilku stronach, deterministyczne tagi podzbiorów dla powtarzalnych danych wyjściowych oraz opcjonalny nieosadzony tryb WinAnsi dla zwykłego tekstu ASCII przy użyciu standardowych czcionek
  • Pola tekstowe AcroForm, pola listy, pola kombi, pola wyboru, przyciski opcji, akcje przycisków (w tym rozszerzone Named / Hide / Show / ImportData / SubmitForm z kontrolowanymi przez użytkownika flagami /Flags), pola podpisu i generowane strumienie wyglądu (wielowierszowe + comb + Tx z formatowaniem bogatym + czcionka CID /AP)
  • Rodzina wyzwalaczy pól formularza AcroForm (/AA /K Keystroke, /F Format, /V Validate, /C Calculate) z jedną metodą opakowującą na wyzwalacz; rejestracja czcionek multi-Unicode /DR przez RegisterAcroFormFont; obsługa kontenerów XFA (XML Forms Architecture) (PDF 1.7 §12.7.6 / §12.7.8) z AddXFAPacket / ClearXFAPackets / XFAPacketCount oraz bramkami zgodności PDF/A + PDF/X, a także spłaszczanie XFA-do-AcroForm (ApplyXFAAsAcroForm dla surowych bajtów XDP, FlattenLoadedXFA dla osadzonego formularza załadowanego PDF), które zamienia statyczne XFA w natywne pola AcroForm, stylizację i grafikę strony, dzięki czemu formularz pozostaje widoczny i możliwy do wypełnienia w czytnikach bez silnika XFA
  • Obszar dostępności otagowanego pliku PDF/UA-1: właściwości sekwencji zawartości oznaczonych §14.8.4 w BeginTaggedContent (/Lang / /Alt / /ActualText / /E), ustawienia atrybutów elementów struktury (/Lang / /E / /T), wyliczenie standardowego typu struktury Table 333 (THPDFStandardStructureType) oraz przeciążenie typowane AddStructureElement
  • Obsługa adnotacji dla wyróżnień, dowolnego tekstu, linków, załączników plików, wyskakujących okienek, redakcji, znaku wodnego, multimediów, 3D / U3D / PRC, stylów obramowania i połączonych wyskakujących komentarzy
  • Standardowe zabezpieczenie hasłem, procedury obsługi zabezpieczeń AES-128 / AES-256, haszowanie PDF 2.0 R6, szyfrowanie kluczem publicznym odbiorcy certyfikatu za pomocą dostarczonych przez wywołującego kopert PKCS#7 oraz bezpieczne binarnie przetwarzanie nie-ASCII nazw barwników / czcionek
  • Podpisy cyfrowe PAdES B-B, B-T, B-LT i B-LTA ze znacznikami czasu RFC 3161, słownikami długoterminowej weryfikacji DSS / VRI, podpisami znaczników czasu dokumentów, ograniczeniami wartości początkowych (Seed Value) oraz XAdES-in-PDF
  • Podpisywanie PFX / PKCS#12 w ramach procesu: wbudowany w bibliotekę stos ASN.1, RSA, AES, PKCS#12 i CMS SignedData podpisuje istniejący zastępczy plik PDF w jednym wywołaniu bez żadnych zależności od OpenSSL lub kryptografii platformy
  • Bezpośrednie backendy PDF dla FastReport 4 / FastReport VCL, QuickReport, ReportBuilder oraz systemu ExpressPrinting DevExpress, dzięki czemu istniejące definicje raportów są emitowane przez HotPDF bez przepisywania układów raportów

Wysokowydajny stos kompresji i obrazowania

Obecne kompilacje HotPDF używają zlib-ng w trybie zgodnym z zlib dla dołączonego backendu Flate. Strumienie stron, strumienie wbudowanych czcionek, mapy ToUnicode CMap, strumienie obrazów Flate, dane wyjściowe powiązane z TIFF oraz funkcje pomocnicze FlateDecode są kierowane przez warstwę zlib HotPDF

Kompilacje zlib-ng Win64x oraz diagnostyczne MSVC Win64 obejmują dyspacz CPU w czasie rzeczywistym dla ścieżek SSE2, SSSE3, SSE4.1, SSE4.2, PCLMULQDQ i AVX2 z zachowaniem ogólnych ścieżek awaryjnych. Win32 pozostaje przy ogólnym zestawie obiektów OMF zlib-ng przez bcc32c, podczas gdy obiekty Win32 JPEG i TIFF nadal używają klasycznej ścieżki OMF bcc32

Standardowe przepływy pracy JPEG używają dołączonego zestawu obiektów libjpeg-turbo 3.1.90 poprzez zgodny z libjpeg interfejs API udostępniany przez HPDFJpeg.pas. Natywne kompilacje Win32, Win64 i Win64x zawierają teraz odpowiednie zestawy obiektów NASM SIMD, a ten sam natywny backend JPEG jest dostępny dla warstwy integracji TIFF w celu obsługi skompresowanych metodą JPEG plików TIFF

Mostek wykonawczy C w HPDFCLibs.pas rozwiązuje teraz funkcje malloc, free, realloc, calloc, memcpy, memmove i memset przez jedną warstwę skierowaną do Pascala, z 32-bajtowym wyrównaniem alokacji dla natywnych buforów przyjaznych dla SIMD

Repozytorium zawiera skrypty do powtarzalnej kompilacji obiektów: Lib\thirdparty\build-bcc32.bat, Lib\thirdparty\build-bcc64x.bat oraz Lib\thirdparty\build-vc64.bat dla pełnego zestawu natywnych bibliotek C, a także skrypty przeznaczone wyłącznie dla zlib-ng do ukierunkowanej rekompilacji kompresji

Szybki przykład dla Delphi

program HelloHotPDF;

uses
  System.SysUtils,
  HPDFDoc;

var
  PDF: THotPDF;
begin
  PDF := THotPDF.Create(nil);
  try
    PDF.AutoLaunch := False;
    PDF.FileName := 'HelloHotPDF.pdf';
    PDF.Compression := cmFlateDecode;
    PDF.EnableFontSubsetting := True;
    PDF.BeginDoc;
    PDF.CurrentPage.SetFont('Arial', [], 18);
    PDF.CurrentPage.TextOut(50, 50, 0, 'Hello HotPDF');
    PDF.EndDoc;
  finally
    PDF.Free;
  end;
end.

Zawartość pakietu

Typowe przypadki użycia