PDFium Delphi Component Docs

ICC-Farbkonvertierung für Dokumente

ConvertPdfDocumentColours liest die aktive PDF-Revision, konvertiert originale Komponentenoperanden und Bildsamples über einen IPdfColourTransform und hängt eine konsistente Revision an einen separaten Ausgabestream an

Unterstützt werden Text- und Vektorfüll-/Konturoperatoren in DeviceGray, DeviceRGB, DeviceCMYK und ICCBased, geerbte Seitenressourcen, benannte Standardfarbraum-Aliase, verschachtelte Form XObjects und rohe oder allgemein gefilterte Bilder mit 8-Bit- oder 16-Bit-Komponenten

Inhaltsarrays teilen einen Operandenparser und Grafikzustandsstack, mit einem Leerzeichen zwischen Streams; q/Q, Farbraumstandards und Komponentenanzahlen bleiben während der Konvertierung an ihre ursprünglichen Quellfarbräume gebunden

CMYK-Operanden kommen aus PDF-Inhalts- und Bildstreams, niemals aus gerenderten RGB-Gettern; geben Sie DeviceCMYKProfile für profilfreie DeviceCMYK-Quellen an

Quell-ICCBased-Profile werden in ihrem ursprünglichen Ressourcenbereich aufgelöst; nur fehlendes oder standardmäßiges /Range [0 1 ...] ist unterstützt; Bild-/Decode-Arrays werden vor der Konvertierung angewandt und anschließend entfernt

16-Bit-Bildsamples behalten die PDF-Big-Endian-Reihenfolge; genaue Bytegeometrie und Zielerweiterung werden vor der Allokation geprüft, ohne zusätzliche Stride- oder Paddingbytes zu erfinden

PreserveAllSpotColours ist standardmäßig true; andernfalls befüllen Sie PreservedSpotColours mit decodierten PDF-Farbmittelnamen; Separation oder DeviceN bleibt nur erhalten, wenn alle genannten Farbmittel ausgewählt sind

Erhaltene Sonderfarbenoperatoren, Tint-Funktionen und Ressourcen bleiben unverändert; nicht ausgewählte Sonderfarben benötigen einen eigenen Konvertierungsbackend und werden als nicht unterstützt gemeldet

Bildschablonenmasken und referenzierte Maskendaten bleiben unverändert; Farbschlüsselmasken, explizite Masken und Matte-Komponenten von Soft Masks benötigen separate Regeln

Nicht unterstützt sind DCT/JPX ohne Originalkomponentendecoder, 1/2/4-Bit-Bilder mit Zeilenpadding, abweichende ICC-Bereiche, Indexed/Cal/Lab/Pattern, Inlinebilder, Shading-Funktionen, Type3-Glyphenprogramme, Farben in Annotationsdictionaries, Formular-Standarddarstellungen, XFA-Farben, Transparenzgruppen, nicht normales Blending, Überdrucken sowie Grafiktransferfunktionen oder Rendering Intents

Forms mit eigenen Ressourcen müssen vor nackten sc/scn-Operanden ihren Farbraum festlegen; gemeinsame Forms oder Bilder mit abweichendem geerbtem Quellkontext werden als nicht unterstützt gemeldet; gecachte Fehler gelten für jeden aufrufenden Bereich

FailOnUnsupported ist standardmäßig true und erhält das Ziel bei Fehlern; false erlaubt unabhängige unterstützte Änderungen, setzt Complete auf false und schreibt bei Teilkonvertierung niemals einen neuen OutputIntent

Ein Teilergebnis kann den vorhandenen OutputIntent der Quelle behalten; OutputIntentWritten meldet speziell, ob dieser Vorgang eine neue Zieldeklaration installiert hat

Ein vollständiges Ergebnis bettet das Ziel-ICC-Profil ein und schreibt einen OutputIntent mit der angeforderten Kennung; dies zertifiziert keine PDF/X-, PDF/A- oder andere Konformität

Quell- und Zielstream müssen verschieden sein; die Quellposition wird wiederhergestellt, Vorbereitungsfehler lassen das Ziel unverändert, Abbruch erhält EPdfOperationCancelled

Die Veröffentlichung ersetzt das Ziel über dessen Stream-API; Fehler beim Kürzen oder Schreiben können Teilausgaben hinterlassen; für atomare Dateiveröffentlichung schreiben Sie temporär und benennen nach Erfolg um

Verschlüsselung und vorhandene Signaturen benötigen eine separat vorbereitete unverschlüsselte, unsignierte Quelle; inkrementelle Farbkonvertierung erhält keine Signaturgültigkeit

Standardlimits sind 64 MiB pro decodiertem Inhalts-/Bildstream, 512 MiB Ausgabestaging, 10,000 Problemmeldungen und Tiefe 64, zusätzlich zu den Budgets des Aktivobjektlesers

Das Ausgabebudget berücksichtigt konservativ Quellbytes, vorbereitete Ersatzobjekte und reservierten xref/trailer-Overhead vor jeder Ergänzung; die vollständige Trailerlänge wird vor Serialisierung berücksichtigt; ein begrenzter Ausgabestream lehnt Überschreitungen vor dem Wachstum seiner logischen Größe ab

Dies begrenzt logisches Ausgabestaging, nicht den gesamten Prozessspeicher oder Kapazitätsrundungen des Allokators; die finale serialisierte Größe wird vor Veröffentlichung erneut geprüft

Reale RGB-, CMYK- und ICCBased-Bildkonvertierung, Text-/Vektorkonvertierung, verschachtelte Forms, Separation-/DeviceN-Erhalt, OutputIntent, komprimierte Objektstreams und PDF-Speichern/Wiederöffnen/Rendern sind mit Delphi und FPC unter Win32/Win64 geprüft

Beispiel

ProviderOptions := TPdfLittleCmsOptions.Default;
Provider := CreatePdfLittleCmsColourTransform(LibraryPath, ProviderOptions);
Options := TPdfDocumentColourOptions.Default;
Options.DeviceCMYKProfile := SourceCmykProfile;
TargetProfile := CreatePdfLittleCmsGrayProfile(LibraryPath);
if not ConvertPdfDocumentColours(Source, Destination, pcsDeviceGray,
  TargetProfile, Provider, Options, Report, CancellationToken) then
  raise Exception.Create(Report.ErrorText);

Öffentliche Deklarationen

type
  TPdfSpotColourNames = array of AnsiString;
  TPdfDocumentColourOptions = record
    ReadOptions: TPdfActiveObjectReadOptions;
    MaxDecodedStreamBytes: Integer;
    MaxOutputBytes: Int64;
    MaxIssues: Integer;
    MaxDepth: Integer;
    FailOnUnsupported: Boolean;
    PreserveAllSpotColours: Boolean;
    PreservedSpotColours: TPdfSpotColourNames;
    DeviceGrayProfile, DeviceRGBProfile, DeviceCMYKProfile: TBytes;
    OutputIntentIdentifier: string;
    class function Default: TPdfDocumentColourOptions; static;
  end;
  TPdfDocumentColourIssue = record
    ObjectNumber: Integer;
    Reason: string;
  end;
  TPdfDocumentColourIssues = array of TPdfDocumentColourIssue;
  TPdfDocumentColourReport = record
    Succeeded: Boolean;
    Complete: Boolean;
    ContentStreamsConverted, FormsConverted, ImagesConverted: Integer;
    ColourOperatorsConverted, PreservedSpotSelections, PreservedMasks: Integer;
    UnsupportedCount: Integer;
    OutputIntentWritten: Boolean;
    Issues: TPdfDocumentColourIssues;
    ErrorText: string;
  end;

function ConvertPdfDocumentColours(Source, Destination: TStream;
  TargetSpace: TPdfColourSpace; const TargetProfile: TBytes;
  Transform: IPdfColourTransform; const Options: TPdfDocumentColourOptions;
  out Report: TPdfDocumentColourReport;
  CancellationToken: IPdfCancellationToken = nil): Boolean;