ConvertPdfDocumentColours læser den aktive PDF-revision, konverterer originale komponentoperander og image samples via en IPdfColourTransform og tilføjer en sammenhængende revision til en separat outputstream
Den understøtter fill/stroke-operatorer for tekst og vektorer i DeviceGray, DeviceRGB, DeviceCMYK og ICCBased, nedarvede sideressourcer, navngivne standard-color-space-aliaser, indlejrede Form XObjects og raw eller general-filter-billeder med 8-bit eller 16-bit komponenter
Content arrays deler én operandparser og graphics state-stack med et mellemrum mellem streams; q/Q, color-space-standarder og komponentantal forbliver knyttet til deres oprindelige kilderum gennem konverteringen
CMYK-operander kommer fra PDF-indhold og billedstreams, aldrig fra renderede RGB-getters; angiv DeviceCMYKProfile for DeviceCMYK-kilder uden profil
Kildens ICCBased-profiler slås op i deres oprindelige resource scope; kun manglende eller standard-/Range [0 1 ...] understøttes, mens billedets /Decode-arrays anvendes før konvertering og fjernes fra det konverterede billede
Billeder bevarer PDF's big-endian-rækkefølge for 16-bit samples; præcis bytegeometri og måludvidelse kontrolleres før allokering, uden opfundne stride- eller padding-bytes
PreserveAllSpotColours er true som standard; ellers udfyldes PreservedSpotColours med afkodede PDF-colorant-navne, og Separation eller DeviceN bevares kun, når alle listede colorants er valgt
Bevarede spot-operatorer, tint-funktioner og ressourcer forbliver intakte; ikke-valgte spotfarver kræver en dedikeret konverteringsbackend og rapporteres som ikke-understøttede
Image stencil masks og refererede mask-data forbliver intakte; color-key masks, explicit masks og soft-mask matte-komponenter kræver separate politikker
Ikke-understøttede grænser omfatter DCT/JPX-billeder uden decoder for originale komponenter, 1/2/4-bit billeder og deres row padding, ikke-standard ICC ranges, Indexed/Cal/Lab/Pattern-rum, inline images, shading-funktioner, Type3 glyph-programmer, farver i annotation dictionaries, form default-appearance-instruktioner, XFA-farveindhold, transparency groups, non-normal blending, overprint samt graphics transfer-funktioner eller rendering intents
Forms med egne ressourcer skal etablere deres color space før bare sc/scn-operander; delte forms eller billeder med forskellig nedarvet kildekontekst rapporteres som ikke-understøttede, og cachede fejl videreføres til hvert kaldende scope
FailOnUnsupported er true som standard og bevarer målet ved fejl; false tillader uafhængige understøttede opdateringer, sætter Complete til false og skriver aldrig et nyt OutputIntent ved delvis konvertering
Et delvist resultat kan beholde kildens eksisterende OutputIntent; OutputIntentWritten viser specifikt, om denne operation installerede en ny måldeklaration
Et komplet resultat indlejrer den leverede mål-ICC-profil og skriver et OutputIntent med den ønskede identifier; dette certificerer ikke PDF/X, PDF/A eller et andet conformance-niveau
Kilde og mål skal være forskellige streams; kildepositionen gendannes, forberedelsesfejl lader målet være uændret, og cancellation bevarer EPdfOperationCancelled
Publicering af det forberedte resultat erstatter målet via dets stream-API; en exception under truncation eller skrivning kan efterlade delvist output, så brug en midlertidig fil og rename efter succes, hvis filpubliceringen skal være atomisk
Kryptering og eksisterende signaturer kræver en separat forberedt ukrypteret, usigneret kilde; incremental farvekonvertering bevarer ikke signaturernes gyldighed
Standarderne tillader 64 MiB pr. afkodet content/image-stream, 512 MiB output staging, 10,000 problemrapporter og dybde 64 ud over grænserne i active-object-læseren
Outputgrænsen medregner konservativt kildebytes, staged erstatningsobjekter og reserveret xref/trailer-overhead før hver opdatering; hele trailerlængden medregnes før serialisering, og en begrænset outputstream afviser writes over grænsen før dens logiske størrelse vokser
Dette begrænser logisk output staging, ikke al proceshukommelse eller allocatorens afrunding af kapacitet; den endelige serialiserede størrelse kontrolleres igen før publicering
Reel RGB-, CMYK- og ICCBased-billedkonvertering, tekst/vektorkonvertering, indlejrede forms, bevarelse af Separation og DeviceN, OutputIntent, komprimerede object streams og PDF gem/genåbn/render er verificeret med Delphi og FPC på Win32 og Win64
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;