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

OptionStandardwertBedeutung
DPI150Angeforderte physische Auflösung, akzeptierter Bereich 36 bis 1200
MaxPages1000Höchstzahl geladener Quellseiten
MaxPixelsPerPage40.000.000Maximale Seitenpixel und maximale Pixel eines einzelnen Quellbilds
MaxTotalPixels500.000.000Maximale akkumulierte Rasterpixel der Ausgabe
MaxRasterBytes256 MiBMaximale Rasterzuordnung für Seite oder Quellbild, konservativ mit vier Byte pro Pixel geprüft
MaxOutputBytes256 MiBMaximale Größe des bereitgestellten PDFs, erzwungen vor Stream-Allokation und Schreibzugriffen
MaxDecodedStreamBytes64 MiBBegrenzt jede Filterkette, den kombinierten Inhalts-Preflight je Seite, einzelne native Stream-Lese-Callbacks, einzelne kodierte Quellbild-Streams und den nativen Ausgabevalidator
MaxTotalDecodedBytes256 MiBBegrenzt 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
MaxInputObjects200.000Maximale Anzahl bereits geladener indirekter Objekte
CancellationTokennilGeliehenes Token, das vor der Arbeit, während des nativen Renderings und Dekodierens sowie vor der Veröffentlichung geprüft wird
CheckpointnilGeliehener 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

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