Rasterkonvertierung geladener PDFs nach PDF/A-4
HPDFArchivalConversion erzeugt ein neues PDF/A-4-Dokument aus dem sichtbaren Seiteninhalt eines geladenen THotPDF-Dokuments und nutzt dabei striktes natives Rendering sowie ein mitgeliefertes sRGB-ICC-Profil
Jede Ausgabeseite enthält ein verlustfrei komprimiertes RGB-Rasterbild in der angeforderten DPI-Auflösung; ursprüngliche sichtbare Abmessungen, Zuschnitt, Rotation und UserUnit fließen in die Geometrie der Ausgabeseite ein
Verwenden Sie das separate Text- und Vektor-erhaltende Profil, wenn originale eingebettete Fonts, Text-Operatoren, Vektorpfade, Bilder, OCR-Ebenen und sichtbare Annotation- oder Widget-Appearances erhalten bleiben müssen; das Raster-Profil bewahrt diese Strukturen nicht
Einstiegspunkte
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;
Laden Sie die Quelle zuerst, und halten Sie jeden Eingabe-Stream im Besitz des Aufrufers am Leben, bis das Quelldokument freigegeben ist
Für die übliche Archivveröffentlichung nehmen Sie den Datei-Einstiegspunkt: Er prüft ein vorhandenes Ziel auf Quell-Aliase, bevor er im Zielverzeichnis eine exklusive temporäre Datei anlegt, validiert die vollständige Konvertierung, flushed die Datei und ersetzt das Ziel per MoveFileEx mit MOVEFILE_REPLACE_EXISTING und MOVEFILE_WRITE_THROUGH
Bei Fehlern in Konvertierung, Rendering, Validierung, Abbruch oder Veröffentlichung bleibt eine vorhandene Zieldatei erhalten und die temporäre Ausgabe wird entfernt
Der Stream-Einstiegspunkt verlangt ein leeres, seek-fähiges Ziel an Position null und weist bekannte Aliase der Eingabe über IsLoadedSourceStreamAlias zurück; Bytes werden erst veröffentlicht, nachdem die vollständig bereitgestellte Ausgabe die native Validierung passiert hat
Ein Schreibfehler am Ziel löst einen best-effort-Reset auf einen leeren Stream aus, aber ein frei implementiertes Gerät oder ein eigener Stream darf diesen Reset ablehnen und einen Teilschreibstand behalten; muss die Dateiveröffentlichung atomar sein, nehmen Sie den Datei-Einstiegspunkt
Optionen und Ressourcengrenzen
| Option | Standardwert | Bedeutung |
|---|---|---|
DPI | 150 | Angeforderte physische Auflösung, akzeptierter Bereich 36 bis 1200 |
MaxPages | 1000 | Höchstzahl geladener Quellseiten |
MaxPixelsPerPage | 40.000.000 | Maximale Seitenpixel und maximale Pixel eines einzelnen Quellbilds |
MaxTotalPixels | 500.000.000 | Maximale akkumulierte Rasterpixel der Ausgabe |
MaxRasterBytes | 256 MiB | Maximale Rasterzuordnung für Seite oder Quellbild, konservativ mit vier Byte pro Pixel geprüft |
MaxOutputBytes | 256 MiB | Maximale Größe des bereitgestellten PDFs, erzwungen vor Stream-Allokation und Schreibzugriffen |
MaxDecodedStreamBytes | 64 MiB | Begrenzt jede Filterkette, den kombinierten Inhalts-Preflight je Seite, einzelne native Stream-Lese-Callbacks, einzelne kodierte Quellbild-Streams und den nativen Ausgabevalidator |
MaxTotalDecodedBytes | 256 MiB | Begrenzt die zusätzliche native Dekoderarbeit mit Filtern über die Konvertierung, den kombinierten Inhalts-Preflight über Seiten und die akkumulierten nativen Stream-Lese-Callbacks über Seiten |
MaxInputObjects | 200.000 | Maximale Anzahl bereits geladener indirekter Objekte |
CancellationToken | nil | Geliehenes Token, das vor der Arbeit, während des nativen Renderings und Dekodierens sowie vor der Veröffentlichung geprüft wird |
Checkpoint | nil | Geliehener synchroner Callback, der mit nil-Sender an Konvertierungs- und nativen Ressourcen-Checkpoints aufgerufen wird; rufen Sie nicht erneut in das Quelldokument hinein |
Dekodiergrenzen zählen Dekoderarbeit und können denselben gefilterten Stream während Preflight, Display-List-Kompilierung und Rendering erneut anrechnen; ein Budget zu erhöhen ist eine explizite Entscheidung des Aufrufers
Der Pixel-Preflight deckt sowohl die angeforderte physische Auflösung als auch den ganzzahligen DPI des nativen Renderers nach UserUnit-Skalierung ab; sehr kleine Einheiten können zusätzliche Rasterpixel erfordern, und gebrochene Seitenmaße können Subpixel-Resampling einführen, wenn das Bild zurück auf die physische Seite abgebildet wird
Konvertierungsgrenzen greifen erst nach dem Laden der Quelle; konfigurieren Sie die eigenen Ressourcengrenzen des Loaders, wenn Sie nicht vertrauenswürdige Eingaben annehmen
Der Quellobjektgraph bleibt erhalten, während Lese-Caches und Dekodierstatistiken gefüllt werden dürfen; Renderingeinstellungen, Abbruchtoken, Backend und Dekodierbudget-Einstellungen werden bei Erfolg und Fehlschlag wiederhergestellt
Gewähren Sie dem Konverter exklusiven Zugriff auf sein Quelldokument, solange es diese Einstellungen vorübergehend setzt
Rendering und Farbe
Jede Seite muss ohne native Fallback-Diagnose, ohne verworfene Diagnose und ohne Fehler durch fehlende Ressourcen rendern; nicht unterstützter Inhalt weist die Konvertierung zurück, statt eine unvollständige Seite zu veröffentlichen
Das ICC-Argument muss sRGB mit einer erkannten Matrix/TRC-Darstellung, den üblichen D50-adaptierten Primärfarben und der IEC-sRGB-Transferfunktion beschreiben; fremde RGB-Profile, CMYK-Profile, fehlerhafte Profile und LUT-basierte Profile werden zurückgewiesen
Die Ausgabe deklariert einen sRGB-OutputIntent und PDF/A-4-XMP-Metadaten; ein bereits an der Quelle konfigurierter eigener Proof- oder Ausgabe-ICC-Workflow wird abgelehnt, weil sich seine Bilddekoder-Einstellungen nicht sicher als sRGB neu interpretieren lassen
Der FPC-Build braucht seine native Codec-Brücke mit verfügbarem LittleCMS und weist die Konvertierung zurück, wenn dieses Farbmanagement-Backend fehlt
Bei JPEG- und JPX-Bildstreams, einschließlich kodierter Inline-Bilder, werden die tatsächlichen Codestream-Abmessungen vor dem nativen Pixeldekodieren geprüft und müssen mit dem PDF-Bildwörterbuch übereinstimmen
JPEG akzeptiert begrenzte 8-Bit-Baseline-, Extended-Sequential- und Progressive-Header; JPX akzeptiert begrenzte J2K-SIZ-Header und JP2-Boxen gewöhnlicher Länge mit höchstens vier Komponenten und einer Komponentenpräzision von höchstens 16 Bit
Kodierte Codecs erhalten zusätzlich ein konservatives Arbeitsbudget von 64 Byte pro Quellpixel, und JPX-Tile-Metadaten sind sowohl durch MaxInputObjects als auch durch 1024 Byte pro Tile innerhalb von MaxRasterBytes begrenzt; das Standard-Rasterbudget von 256 MiB erlaubt daher höchstens 4.194.304 kodierte Quellpixel, und Aufrufer dürfen es für größere Bilder explizit erhöhen
JBIG2-Konvertierung wird abgelehnt, weil sich ihre internen Regionen- und Symbolallokationen über die verfügbare Header-API nicht begrenzen lassen; auch nichtterminale Bildcodecs, JP2-Boxen erweiterter Länge, nicht unterstützte Wrapper und gepackte Codec-Streams mit DecodeParms werden abgelehnt
CCITT-Faxparameter müssen die deklarierten positiven Bildabmessungen beibehalten; DecodeParms.Columns- und Rows-Übersteuerungen, die vom Wörterbuch abweichen, einschließlich unbekanntem Rows=0, werden vor dem nativen Dekodieren zurückgewiesen
Diese Prüfungen begrenzen die von diesem Konverter akzeptierten bekannten Header- und Allokationsprofile und verbürgen keine vollständige Prozessspeicher-Sandbox für jeden nativen Dekoder
Informations- und Qualitätsverlust
- Vektorinhalt, Schriften, Transparenz und Quellfarbräume werden zu RGB-Seitenpixeln; höhere DPI verbessern die visuelle Detailgenauigkeit, erhöhen aber Speichernutzung und Dateigröße
- Ausgabetext ist weder durchsuchbar noch markierbar, und es wird keine Textebene oder OCR-Ausgabe synthetisiert
- Annotationen, Annotation-Appearances, Formularfelder, Widget-Appearances und sichtbare Signatur-Appearances werden weggelassen, statt in das Seitenraster eingebrannt zu werden
- Digitale Signaturen, eingebettete Dateien, Skripte, Actions, Lesezeichen, Ebenen als interaktive Steuerelemente, strukturelle Tags und die ursprüngliche Dokumentidentität werden nicht bewahrt
- Das Ergebnis bewahrt weder Vektor-Editierbarkeit noch die ursprüngliche Signaturgültigkeit, PDF/UA-Barrierefreiheit oder die Semantik des Quelldokuments
THPDFArchivalConversionReport liefert Erfolgs- und Abbruchstatus, Quellseiten- und gerenderte Seitenzahlen, Rasterpixel, Ausgabebytes, Zähler entfernter Annotationen/Formulare/Anhänge, eine Fehlerdiagnose und die nativen Validierungsbefunde
FailureKind unterscheidet afkNone, afkConversion, afkBudget und afkCancelled; typisierte Converter-Budgetfehler liefern zusätzlich BudgetMetric, BudgetObserved und BudgetLimit
Eine Checkpoint-Ausnahme stoppt die Konvertierung und wird über das native Fehlerergebnis gemeldet; Wrapper, die die ursprüngliche Callback-Ausnahmekategorie brauchen, müssen sie bewahren, bevor der Konverter sie abfängt
Die archive.pdfa4.raster-JSON- und C-ABI-Operation verlangt eine explizite Bestätigung des Informationsverlusts, erhält das Quellhandle, liefert das validierte PDF und den Verlustbericht und setzt konservative Job-Budget-Obergrenzen
Konformitätsprüfung
Der Konverter lädt seine bereitgestellte Ausgabe neu und verlangt vor der Veröffentlichung ValidatePDFA4 mit dem Basis-PDF/A-4-Profil; der native Validator deckt seinen dokumentierten begrenzten Regelsatz ab und ist kein Beweis für jede Anforderung aus ISO 19005-4
Für die unabhängige Abnahme eignet sich veraPDF mit --flavour 4; das Regression-Fixture mit nicht eingebettetem Text, Transparenz, einem RGB-Bild, einem Link, einem Signatur-Widget und einem Anhang bestand veraPDF 1.30.2 ohne eine einzige fehlgeschlagene Regel oder Prüfung
Führen Sie Tests/Delphi/Run-HotPDFArchivalTests.bat für die fokussierte Nicht-GUI-Regressionssuite aus