PDFium Delphi Component Docs

ICC-farvekonvertering af dokumenter

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

Eksempel

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

Offentlige deklarationer

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;