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
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);
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;