Wczytany PDF do PDF/A-4 z zachowaniem tekstu i wektorów
HPDFArchivalConversion oferuje profil zachowania dla wczytanych dokumentów, których widoczne fonty, przestrzenie kolorów i zasoby renderowania mogą spełnić PDF/A-4 bez podmiany zawartości stron
Konwerter zachowuje oryginalne operatory tekstu, ścieżki wektorowe, obrazy, geometrię stron i istniejące warstwy tekstu OCR, spłaszcza widoczne wyglądy normal adnotacji i widgetów w wektorowe Form XObjects, naprawia wspierane problemy metadanych i strukturalne i waliduje zserializowany wynik przed publikacją
Ten profil nigdy nie rasteryzuje strony: RasterizedPages pozostaje zerem, włącznie gdy OCR renderuje tymczasową bitmapę rozpoznawania i dokleja niewidzialny przeszukiwalny tekst
Akceptacja runtime obejmuje Delphi Win32 i Win64; Windows FPC kompiluje implementację ze świeżych źródeł, a wygenerowane publiczne nagłówki kompilują z C++Builder Win32 i Win64x
Punkty wejścia
function HPDFConvertLoadedToPDFA4Preserving(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalPreservationOptions;
out Report: THPDFArchivalPreservationReport): Boolean;
function HPDFConvertLoadedToPDFA4PreservingFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalPreservationOptions;
out Report: THPDFArchivalPreservationReport): Boolean;
Najpierw wczytaj źródło, utrzymuj żywotność każdego należącego do wywołującego strumienia wejściowego i daj konwerterowi wyłączny dostęp do dokumentu podczas operacji
Options := THPDFArchivalPreservationOptions.Default;
if not HPDFConvertLoadedToPDFA4PreservingFile(Source, TargetFileName,
SRGBProfile, Options, Report) then
raise Exception.Create(Report.Conversion.Diagnostic);
Dowód zachowania
Konwerter robi snapshot bieżącego edytowanego grafu źródła pod transakcją grafu i wycofuje źródło po serializacji, po czym wykonuje całą pracę konwersji na niezależnym wczytanym klonie
Oryginalne zdekodowane strumienie zawartości stron muszą pozostać identyczne bajt w bajt i osiągalne z oryginalnych stron w oryginalnej kolejności po ponownym wczytaniu wyjścia
Drzewa zasobów stron i zachowane drzewa zasobów wyglądów normal są przechodzone z limitami obiektów i rekurencji; osadzone programy fontów, mapy ToUnicode, obrazy, profile ICC i zagnieżdżone Form XObjects zachowują swoje oryginalne zakodowane ładunki, weryfikowane streamingowym SHA-256 i sprawdzane pod kątem dalszej osiągalności z wyjściowych stron
Niezależne strumienie zawartości otaczają oryginalne operatory strony osłonami stanu grafiki i utrzymują doklejone operatory wyglądów, unikając natywnej ścieżki doklejania pojedynczego strumienia, która przepisywałaby oryginalny strumień zawartości
TextAndVectorContentPreserved staje się true dopiero po przejściu walidacji wyjścia natywnego i kontroli zachowania; jest czyszczone, gdy konwersja albo publikacja pliku zawiedzie
Obsługa wyglądów
- Widoczne wyglądy normal
AP/Nsą mapowane z ich Form BBox i Matrix na Rect adnotacji przez natywne spłaszczanie adnotacji, z zachowaniem własnych fontów i zasobów - Flagi Invisible, Hidden i NoView uniemożliwiają malowanie nawet, gdy istniejący wygląd normal jest obecny; adnotacje Popup są usuwane bez malowania
- Linki bez ramki bez wyglądu normal są usuwane bez malowania tylko, gdy jawna zerowa szerokość ramki ustala, że nie mają widocznej ramki
SynthesizeMissingAppearancesdomyślnie true i wywołuje natywne generowanie markupu albo wyglądów pól; nieobsługiwane subtypy, niepoprawne prostokąty albo nieudane generowanie odrzucają konwersję- Brakujące tekstowe wyglądy wspierają wartości ASCII z zgodnym natywnym kodowaniem fontu; wartości tekstowe szesnastkowe, Unicode albo maskowane wymagają jawnego wyglądu normal
- Syntetyzowane tekstowe wyglądy są sprawdzane względem wartości źródła w ponownie wczytanym przeszukiwalnym tekście po normalizacji białych znaków; niezgodne kodowanie fontu odrzuca publikację
Dostarczenie istniejącego wyglądu normal wspiera dowolny tekst osadzonych fontów już poprawnie reprezentowany w tym wyglądzie, włącznie z Unicode; konwerter zachowuje ten wygląd zamiast podstawiać font systemowy
Spłaszczanie usuwa interakcję adnotacji, edytowalne pola, obliczenia, akcje i pola podpisów, zachowując widoczne wyglądy; każdy dotknięta adnotacja i każdy syntetyzowany wygląd produkuje wpis utraty ze swoją stroną źródła, indeksem adnotacji i numerem obiektu, gdy dostępne
Kolor, fonty i jawne utraty
Wymagany argument ICC to profil sRGB matrix/TRC akceptowany przez istniejący walidator archiwalny; każdy istniejący output intent musi mieć dokładnie te same zdekodowane bajty co dostarczony profil, w przeciwnym razie konwersja jest odrzucana, by uniknąć ponownej interpretacji istniejącego warunku wyjścia
Konwerter dodaje output intent PDF/A sRGB tylko, gdy potrzebny, synchronizuje rzeczywisty serializator do nagłówka PDF 2.0 i wywołuje ograniczoną bazową naprawę metadanych i struktury PDF/A-4
Nie osadza brakujących widocznych programów fontów, nie przekodowuje oryginalnego tekstu, nie przemalowuje operatorów DeviceCMYK, nie podmienia istniejącego warunku wyjścia ani nie spłaszcza przezroczystości strony w bitmapę; nierozwiązane natywne ustalenia preflight odrzucają publikację
Zaszyfrowane źródła muszą być odszyfrowane przed konwersją; pola podpisów wymagają jawnego AllowSignatureInvalidation, a istniejące pliki osadzone jawnego RemoveEmbeddedFiles, bo ten profil celuje w bazowy PDF/A-4
Losses raportuje tež unieważnienie podpisów, usuwanie plików osadzonych, usuwanie legacy słowników Info i usuwanie zabronionych metadanych katalogu albo prezentacji
Istniejące XMP jest zachowywane, gdy wspierane; przy generowaniu metadanych wspierane informacje tytułu, autora, tematu i słów kluczowych są przenoszone, podczas gdy dowolne legacy pola Info nie są obiecane do przetrwania
OCR i budżety
AddOCRToImagePages domyślnie false; włączenie rozpoznaje strony bez wyekstrahowalnego tekstu i dokleja niewidzialny tekst bez podmiany oryginalnej zawartości albo istniejących warstw OCR
Ustaw OCREngine na silnik aplikacji albo zostaw nil dla wbudowanego ograniczonego silnika OCR ASCII, którego pokrycie języka i typografii pozostaje pokryciem wbudowanego profilu rozpoznawania
OCROptions steruje rozdzielczością rozpoznawania i budżetami słów, podczas gdy konwerter wymusza skip-pages-with-text, retencję istniejących warstw OCR i pominięcie nowej grupy optional-content
Limits używa THPDFArchivalConversionOptions.Default dla liczby stron, obiektów, etapowanych bajtów wyjścia, pracy pojedynczego strumienia, skumulowanej pracy strumieni, anulowania i synchronicznych checkpointów; limity pikseli rastra stosują się tylko, gdy OCR renderuje bitmapy rozpoznawania
Dodatkowe wartości domyślne to 1,024 wpisów utrat, 1,048,576 jednostek kodu tekstu wyekstrahowanego albo oczekiwanego i 4,000,000 tokenów zawartości na przejście walidacji natywnej
Haszowanie ładunków zasobów zarachowuje zakodowane bajty względem tych samych budżetów pracy strumieni; weryfikacja źródła i wyjścia obie konsumują skumulowaną pracę, więc duże kolekcje skanów mogą wymagać jawnie zwiększonego MaxTotalDecodedBytes, mimo że weryfikacja zasobów używa stałego 64 KiB bufora haszowania
Budżety stosują się po wczytaniu źródła i ograniczają osobno snapshoty posiadane przez konwerter i etapowane wyjście; skonfiguruj limity wczytywania przy przyjmowaniu niezaufanego wejścia
Publikacja i walidacja
API strumienia wymaga pustego seekowalnego celu w pozycji zero i odrzuca aliasy źródła; kopiuje etapowane bajty dopiero po przejściu ponownego wczytania, walidacji natywnej, kontroli zachowania i kontroli anulowania
Niepowodzenie zapisu celu wywołuje reset best-effort; dowolny własny strumień może odrzucić ten reset, więc użyj punktu wejścia plikowego dla atomowej publikacji pliku
API plikowy sonda aliasy źródła, tworzy wyłączny plik tymczasowy obok celu, flushuje go i podmienia cel przez MoveFileEx dopiero po przejściu wszystkich kontroli; wcześniejsze niepowodzenia zachowują istniejący cel i usuwają plik tymczasowy
InitialValidationIssues, Repair, Conversion.ValidationIssues, szczegóły OCR, liczniki strumieni, liczniki wyekstrahowanego tekstu i jawne utraty pozostają dostępne do inspekcji
Walidacja natywna obejmuje wspierane reguły HotPDF PDF/A-4 i nie jest ogólną certyfikacją dowolnych PDF; akceptacja regresji dodatkowo używa niezależnych kontroli pypdf i MuPDF plus walidacji veraPDF PDF/A-4 na artefaktach wygenerowanych wyglądów i natywnego OCR
Regresja rzeczywistego korpusu obejmuje przewodniki Word i biblioteczne z osadzonymi fontami oraz 380-stronicową kolekcję skanów chińskich, podczas gdy raport handlowy z nieosadzonymi fontami i zawartością DeviceCMYK jest jawnym przypadkiem odrzucenia
Polecenia regresji
powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win32
powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win64
python Tests/Delphi/Fixtures/ArchivalPreservation/verify_preserving_output.py
verapdf --format xml --flavour 4 Tests/Delphi/generated/ArchivalPreservation/appearance.pdf Tests/Delphi/generated/ArchivalPreservation/ocr.pdf Tests/Delphi/generated/ArchivalPreservation/native-appearance.pdf
Runner Delphi tłumi uruchamianie przeglądarki i obejmuje fiksatury regresji zarówno zachowania, jak i istniejącego rastra; niezależna akceptacja veraPDF używa rzeczywistego profilu walidacji PDF/A-4
Powiązane tematy
Konwersja archiwalna rastrowa dostarcza osobny profil z jawną utratą oryginalnego tekstu i wektorów, gdy natywne renderowanie jest wspierane