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
| Opcja | Domyślnie | Znaczenie |
|---|---|---|
DPI | 150 | Żądana fizyczna rozdzielczość, akceptowany zakres od 36 do 1200 |
MaxPages | 1000 | Maksymalna liczba załadowanych stron źródłowych |
MaxPixelsPerPage | 40,000,000 | Maksymalna liczba pikseli strony i maksymalna liczba pikseli pojedynczego obrazu źródłowego |
MaxTotalPixels | 500,000,000 | Maksymalna skumulowana liczba pikseli rastra wyjścia |
MaxRasterBytes | 256 MiB | Maksymalna alokacja rastra strony lub obrazu źródłowego, sprawdzana konserwatywnie po cztery bajty na piksel |
MaxOutputBytes | 256 MiB | Maksymalny rozmiar etapowanego PDF, egzekwowany przed alokacją strumienia i zapisami |
MaxDecodedStreamBytes | 64 MiB | Ogranicza 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 |
MaxTotalDecodedBytes | 256 MiB | Ogranicza 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 |
MaxInputObjects | 200,000 | Maksymalna liczba już załadowanych obiektów pośrednich |
CancellationToken | nil | Pożyczony token sprawdzany przed pracą, podczas natywnego renderowania i dekodowania oraz przed publikacją |
Checkpoint | nil | Poż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
- Zawartość wektorowa, fonty, przezroczystość i przestrzenie barw źródła stają się pikselami RGB strony; wyższe DPI poprawia detal wizualny, ale zwiększa zużycie pamięci i rozmiar pliku
- Tekst wyjściowy nie jest przeszukiwalny ani wybieralny, a żadna warstwa tekstu ani wyjście OCR nie są syntetyzowane
- Adnotacje, appearance adnotacji, pola formularzy, appearance widgetów i widoczne appearance podpisów są pomijane, a nie wypalane w rastrze strony
- Podpisy cyfrowe, pliki osadzone, skrypty, akcje, zakładki, warstwy jako interaktywne kontrolki, tagi strukturalne i tożsamość pierwotnego dokumentu nie są zachowywane
- Wynik nie zachowuje edytowalności wektorowej, ważności pierwotnych podpisów, dostępności PDF/UA ani semantyki dokumentu źródłowego
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