ConvertPdfDocumentColours läser den aktiva PDF-revisionen, konverterar ursprungliga komponentoperatorer och bildprov via en IPdfColourTransform och lägger till en sammanhängande revision i en separat utdataström
Den stödjer text- och vektorfyllnads-/streckoperatorer i DeviceGray, DeviceRGB, DeviceCMYK och ICCBased-rymder, ärvda sidresurser, namngivna alias för standardfärgrymd, kapslade Form XObjects samt råa eller generellt filtrerade bilder med 8- eller 16-bitars komponenter
Innehållsarrayer delar en operandparser och en grafiktillståndsstack med ett mellanrum mellan strömmarna; q/Q, standardvärden för färgrymd och komponentantal förblir knutna till sina ursprungliga källrymder genom hela konverteringen
CMYK-operander kommer från PDF-innehållet och bildströmmarna, aldrig från renderade RGB-hämtare; ange DeviceCMYKProfile för oprofileringade DeviceCMYK-källor
Källprofiler för ICCBased löses från deras ursprungliga resursomfång; endast en frånvarande eller standard /Range [0 1 ...] stöds, medan bildernas /Decode-arrayer tillämpas före konverteringen och tas bort från den konverterade bilden
Bilder behåller PDF:s big-endian-ordning för 16-bitars prov; exakt bytegeometri och målutökning kontrolleras före provallokering, och inga stride- eller utfyllnadsbyte hittas på
PreserveAllSpotColours har true som standard; annars fyller du PreservedSpotColours med avkodade PDF-färgnamn, och en Separation- eller DeviceN-rymd bevaras bara när varje listat färgämne är valt
Bevarade spotoperatorer, tonfunktioner och resurser förblir orörda; ovalda spotfärger kräver en dedikerad konverteringsbackend och rapporteras som icke stödda
Bildmallar och refererad maskdata förblir orörda; färgnyckelsmasker, explicita masker och mjukmaskens mattekomponenter kräver separata policyer
Gränser som inte stöds omfattar DCT/JPX-bilder utan en avkodare för ursprungliga komponenter, 1/2/4-bitars bilder och deras radutfyllnad, icke-standard ICC-områden, Indexed/Cal/Lab/Pattern-rymder, inline-bilder, skuggningsfunktioner, Type3-glyfprogram, annoteringsordboksfärger, standardutseendeinstruktioner för formulär, XFA-färginnehåll, transparensgrupper, icke-normal blandning, overprint och grafiköverföringsfunktioner eller renderingsintentioner
Formulär med egna resurser måste etablera sin färgrymd före nakna sc/scn-operander; delade formulär eller bilder vars ärvda källkontext avviker rapporteras som icke stödda, och cachade fel fortplantas till varje anropande omfång
FailOnUnsupported har true som standard och bevarar målet vid fel; sätter du den till false tillåts oberoende uppdateringar som stöds, Complete sätts till false och en ny OutputIntent skrivs aldrig för en partiell konvertering
Ett partiellt resultat kan behålla en befintlig OutputIntent från sin källa; OutputIntentWritten rapporterar specifikt om denna operation installerade en ny måldeklaration
Ett fullständigt resultat bäddar in den angivna mål-ICC-profilen och skriver en OutputIntent med den begärda identifieraren; detta certifierar inte PDF/X, PDF/A eller någon annan konformansnivå
Källa och mål måste vara skilda strömmar; källpositionen återställs, förberedelsefel lämnar målet oförändrat, och avbrytning bevarar EPdfOperationCancelled
Publicering av det förberedda resultatet ersätter målet via dess ström-API; ett undantag vid trunkering eller skrivning till målet kan lämna partiell utdata, så anropare som behöver atomär filpublicering bör skriva till en temporärfil och döpa om den efter lyckat resultat
Kryptering och befintliga signaturer kräver en separat förberedd okrypterad, osignerad källa; inkrementell färgkonvertering bevarar inte signaturgiltighet
Standarderna tillåter 64 MiB per avkodad innehålls-/bildström, 512 MiB för utdata-mellanlagring, 10,000 problemrapporter och djup 64, utöver den aktiva objektläsarens budgetar
Utdatabudgeten inkluderar konservativt källbyte, mellanlagrade ersättningsobjekter och reserverad xref/trailer-overhead innan varje uppdatering ackumuleras; den fullständiga trailer-längden ingår före serialisering, och en avgränsad utdataström avvisar skrivningar utöver gränsen innan dess logiska storlek växer
Detta avgränsar logisk utdata-mellanlagring, inte allt processminne eller minnesallokatorns kapacitetsavrundning, och den slutliga serialiserade storleken kontrolleras igen före publicering
Verklig konvertering av RGB-, CMYK- och ICCBased-bilder, text-/vektorkonvertering, kapslade formulär, bevarande av Separation och DeviceN, OutputIntent, komprimerade objektströmmar samt PDF-sparing/återöppning/rendering är verifierade med Delphi och FPC på Win32 och 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;