Konwersja załadowanego PDF do rastra PDF/A-4

HPDFArchivalConversion tworzy nowy dokument PDF/A-4 z widocznej zawartości stron załadowanego dokumentu THotPDF, używając ścisłego natywnego renderowania i dostarczonego profilu ICC sRGB

Każda strona wyjściowa zawiera bezstratnie skompresowany obraz rastrowy RGB w żądanym DPI, a jej pierwotne widoczne wymiary, przycięcie, rotacja i UserUnit znajdują odzwierciedlenie w geometrii strony wyjściowej

Użyj oddzielnego profilu zachowującego tekst i wektory, gdy mają przetrwać oryginalne osadzone czcionki, operatory tekstu, ścieżki wektorowe, obrazy, warstwy OCR oraz widoczne wyglądy adnotacji lub widgetów; profil rastrowy nie zachowuje tych struktur

Punkty wejściowe

function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
  Destination: TStream; const SRGBProfile: TBytes;
  const Options: THPDFArchivalConversionOptions;
  out Report: THPDFArchivalConversionReport): Boolean;

function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
  const TargetFileName: string; const SRGBProfile: TBytes;
  const Options: THPDFArchivalConversionOptions;
  out Report: THPDFArchivalConversionReport): Boolean;

Najpierw załaduj dokument źródłowy i utrzymuj każdy strumień wejściowy należący do wywołującego, dopóki dokument źródłowy nie zostanie zniszczony

Do zwykłej publikacji archiwalnej użyj punktu wejściowego plikowego: sprawdza on istniejący cel pod kątem aliasowania źródła, zanim utworzy wyłączny plik tymczasowy w katalogu docelowym, waliduje kompletną konwersję, opróżnia plik na dysk i zastępuje cel przez MoveFileEx z MOVEFILE_REPLACE_EXISTING i MOVEFILE_WRITE_THROUGH

Przy niepowodzeniu konwersji, renderowania, walidacji, anulowania lub publikacji istniejący plik docelowy pozostaje nietknięty, a tymczasowe wyjście jest usuwane

Punkt wejściowy strumienia wymaga pustego celu obsługującego pozycjonowanie, ustawionego na pozycji zero, i odrzuca znane aliasy wejścia przez IsLoadedSourceStreamAlias; bajty publikuje dopiero po tym, jak kompletny etapowany wynik przejdzie walidację natywną

Błąd zapisu do celu wyzwala reset do pustego strumienia w trybie best-effort, ale dowolne urządzenie albo własny strumień może ten reset odrzucić i zachować częściowy zapis; gdy publikacja pliku musi być atomowa, użyj punktu wejściowego plikowego

Opcje i limity zasobów

OpcjaDomyślnieZnaczenie
DPI150Żądana fizyczna rozdzielczość, akceptowany zakres od 36 do 1200
MaxPages1000Maksymalna liczba załadowanych stron źródłowych
MaxPixelsPerPage40,000,000Maksymalna liczba pikseli strony i maksymalna liczba pikseli pojedynczego obrazu źródłowego
MaxTotalPixels500,000,000Maksymalna skumulowana liczba pikseli rastra wyjścia
MaxRasterBytes256 MiBMaksymalna alokacja rastra strony lub obrazu źródłowego, sprawdzana konserwatywnie po cztery bajty na piksel
MaxOutputBytes256 MiBMaksymalny rozmiar etapowanego PDF, egzekwowany przed alokacją strumienia i zapisami
MaxDecodedStreamBytes64 MiBOgranicza każdy łańcuch filtrów, łączny preflight zawartości każdej strony, pojedyncze natywne callbacki odczytu strumienia, pojedyncze zakodowane strumienie obrazów źródłowych oraz natywny walidator wyjścia
MaxTotalDecodedBytes256 MiBOgranicza dodatkową natywną pracę dekoderów filtrowanych w ramach konwersji, łączny preflight zawartości między stronami oraz skumulowane natywne callbacki odczytu strumienia między stronami
MaxInputObjects200,000Maksymalna liczba już załadowanych obiektów pośrednich
CancellationTokennilPożyczony token sprawdzany przed pracą, podczas natywnego renderowania i dekodowania oraz przed publikacją
CheckpointnilPożyczony synchroniczny callback wywoływany z nadawcą nil na checkpointach konwersji i natywnych zasobów; nie wchodź ponownie do dokumentu źródłowego

Limity dekodowania liczą pracę dekoderów i mogą ponownie obciążyć ten sam filtrowany strumień podczas preflight, kompilacji listy wyświetlania i renderowania; zwiększenie budżetu to jawna decyzja wywołującego

Preflight pikseli obejmuje zarówno żądaną fizyczną rozdzielczość, jak i całkowitoliczbowe DPI natywnego renderera po przeskalowaniu UserUnit; bardzo małe jednostki mogą wymagać dodatkowych pikseli rastra, a ułamkowe wymiary strony mogą wprowadzić resampling subpikselowy przy mapowaniu obrazu z powrotem na fizyczną stronę

Limity konwersji działają po załadowaniu źródła; przy przyjmowaniu niezaufanego wejścia skonfiguruj własne limity zasobów loadera

Graf obiektów źródła jest zachowywany, natomiast cache odczytu i statystyki dekodowania mogą zostać zapełnione; ustawienia renderowania, token anulowania, backend i ustawienia budżetu dekodowania są przywracane zarówno po sukcesie, jak i po niepowodzeniu

Zapewnij konwerterowi wyłączny dostęp do dokumentu źródłowego, dopóki tymczasowo stosuje te ustawienia

Renderowanie i kolor

Każda strona musi się wyrenderować bez natywnej diagnostyki fallback, pominiętej diagnostyki ani błędu brakującego zasobu; nieobsługiwana zawartość odrzuca konwersję zamiast publikować niekompletną stronę

Argument ICC musi opisywać sRGB z rozpoznaną reprezentacją matrix/TRC, standardowymi primaries zaadaptowanymi do D50 i funkcją transferu IEC sRGB; niepowiązane profile RGB, profile CMYK, źle uformowane profile i profile oparte na LUT są odrzucane

Wyjście deklaruje sRGB OutputIntent i metadane XMP PDF/A-4; własny workflow proof albo wyjściowy ICC skonfigurowany już na źródle jest odrzucany, bo jego ustawień dekodera obrazów nie da się bezpiecznie zreinterpretować jako sRGB

Build FPC wymaga natywnego mostka kodeków z dostępnym LittleCMS i odrzuca konwersję, gdy tego backendu zarządzania kolorem brakuje

Strumienie obrazów JPEG i JPX, włącznie z zakodowanymi obrazami inline, mają faktyczne wymiary codestream badane przed natywnym dekodowaniem pikseli i muszą zgadzać się ze słownikiem obrazu PDF

JPEG akceptuje ograniczone nagłówki 8-bit baseline, extended sequential i progressive; JPX akceptuje ograniczone nagłówki J2K SIZ i boxy JP2 o zwykłej długości z co najwyżej czterema komponentami i precyzją komponentu co najwyżej 16 bitów

Zakodowane kodeki mają dodatkowy konserwatywny budżet roboczy 64 bajty na piksel źródłowy, a metadane kafelków JPX są ograniczone zarówno przez MaxInputObjects, jak i 1024 bajty na kafelek w ramach MaxRasterBytes; domyślny budżet rastra 256 MiB pozwala więc na co najwyżej 4,194,304 zakodowane piksele źródłowe, a wywołujący może go jawnie zwiększyć dla większych obrazów

Konwersja JBIG2 jest odrzucana, bo jej wewnętrznych alokacji regionów i symboli nie da się ograniczyć dostępnym API nagłówka; odrzucane są też kodeki obrazów nonterminal, boxy JP2 o rozszerzonej długości, nieobsługiwane wrappery i opakowane strumienie kodeków niosące DecodeParms

Parametry faksu CCITT muszą zachować zadeklarowane dodatnie wymiary obrazu; nadpisania DecodeParms.Columns i Rows różniące się od słownika, włącznie z nieznanym Rows=0, są odrzucane przed natywnym dekodowaniem

Te kontrole ograniczają znane profile nagłówków i alokacji akceptowane przez ten konwerter i nie gwarantują kompletnej piaskownicy pamięci procesu dla każdego natywnego dekodera

Utrata informacji i jakości

THPDFArchivalConversionReport dostarcza stan sukcesu i anulowania, liczby stron źródłowych i wyrenderowanych, piksele rastra, bajty wyjścia, liczby usuniętych adnotacji/formularzy/załączników, diagnostykę niepowodzenia oraz znaleziska walidacji natywnej

FailureKind rozróżnia afkNone, afkConversion, afkBudget i afkCancelled; typowane niepowodzenia budżetu konwertera dostarczają też BudgetMetric, BudgetObserved i BudgetLimit

Wyjątek z checkpointa zatrzymuje konwersję i jest raportowany przez natywny wynik niepowodzenia; wrappery wymagające pierwotnej kategorii wyjątku callbacka muszą ją zachować, zanim konwerter ją złapie

Operacja archive.pdfa4.raster JSON i C ABI wymaga jawnego zaakceptowania utraty informacji, zachowuje uchwyt źródła, dostarcza walidowany PDF i raport utraty oraz stosuje konserwatywne limity budżetu zadania

Weryfikacja zgodności

Konwerter przeładowuje swój etapowany wynik i wymaga ValidatePDFA4 z bazowym profilem PDF/A-4 przed publikacją; natywny walidator pokrywa swój udokumentowany ograniczony zestaw reguł i nie jest dowodem spełnienia każdego wymagania ISO 19005-4

Niezależna akceptacja może użyć veraPDF z --flavour 4; fixture regresyjny zawierający tekst bez osadzenia, przezroczystość, obraz RGB, link, widget podpisu i załącznik przeszedł veraPDF 1.30.2 bez żadnych niezdanych reguł ani kontroli

Uruchom Tests/Delphi/Run-HotPDFArchivalTests.bat, aby wykonać ukierunkowany pakiet regresji bez GUI