PDFium Delphi Component Docs

Dokumentkonvertering till ICC-färger

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

Example

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

Public declarations

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;