PDFium Delphi Component Docs

ICC-kleurconversie van het document

ConvertPdfDocumentColours leest de actieve PDF-revisie, zet originele componentoperanden en beeldsamples om via een IPdfColourTransform en voegt een coherente revisie toe aan een aparte uitvoerstream

Hij ondersteunt tekst- en vectorvul-/lijnoperatoren in DeviceGray, DeviceRGB, DeviceCMYK en ICCBased-kleurruimten, overgeërfde paginabronnen, genoemde alias-namen voor standaardkleurruimten, geneste Form XObjects en rauwe of general-filter-afbeeldingen met 8-bit of 16-bit componenten

Content-arrays delen één operandparser en één grafische statusstack met een spatie tussen streams; q/Q, standaardkleurruimten en componentaantallen blijven tijdens de conversie gekoppeld aan hun oorspronkelijke bronruimte

CMYK-operanden komen uit de PDF-content- en beeldstreams, nooit uit gerenderde RGB-getters; geef DeviceCMYKProfile op voor bronnen in DeviceCMYK zonder profiel

ICCBased-bronprofielen worden opgelost vanuit hun oorspronkelijke resourcebereik; alleen een afwezige of standaard /Range [0 1 ...] wordt ondersteund, terwijl /Decode-arrays van afbeeldingen vóór de conversie worden toegepast en uit de geconverteerde afbeelding worden verwijderd

Afbeeldingen behouden de PDF-big-endian-volgorde voor 16-bit samples; exacte bytegeometrie en doelexpansie worden gecontroleerd voordat samples worden toegewezen, en er worden geen stride- of padding-bytes verzonnen

PreserveAllSpotColours staat standaard op true; anders vul je PreservedSpotColours met gedecodeerde PDF-kleurstofnamen, en een Separation- of DeviceN-ruimte wordt alleen behouden wanneer elke opgegeven kleurstof is geselecteerd

Behouden spot-operatoren, tintfuncties en resources blijven intact; niet-geselecteerde spots vereisen een speciaal conversiebackend en worden als niet-ondersteund gemeld

Afbeeldingsstencilmaskers en gerefereerde maskerdata blijven intact; color-key-maskers, expliciete maskers en soft-mask-matticomponenten vereisen aparte policies

Niet-ondersteunde gevallen zijn onder andere DCT/JPX-afbeeldingen zonder decoder voor de oorspronkelijke componenten, 1/2/4-bit afbeeldingen en hun rijpadding, niet-standaard ICC-bereiken, Indexed/Cal/Lab/Pattern-ruimten, inline afbeeldingen, shading-functies, Type3-glyphprogramma's, annotatie-dictionarykleuren, instructies voor default appearance van formulieren, XFA-kleureninhoud, transparenatiegroepen, niet-normaal blending, overprint en grafische overdrachtsfuncties of rendering-intents

Formulieren met eigen resources moeten hun kleurruimte vastleggen vóór kale sc/scn-operanden; gedeelde formulieren of afbeeldingen waarvan de overgeërfde broncontext verschilt, worden als niet-ondersteund gemeld, en gecachte fouten planten zich voort naar elke aanroepende scope

FailOnUnsupported staat standaard op true en laat het doel bij mislukking onaangetast; zet het op false om onafhankelijke, ondersteunde updates toe te staan, waarbij Complete op false gaat en er nooit een nieuw OutputIntent voor een partiële conversie wordt geschreven

Een partiëel resultaat kan een bestaand OutputIntent uit zijn bron behouden; OutputIntentWritten rapporteert specifiek of deze operatie een nieuwe doeldeclaratie heeft geplaatst

Een volledig resultaat sluit het opgegeven doel-ICC-profiel in en schrijft een OutputIntent met de gevraagde identifier; dit certificeert geen PDF/X, PDF/A of ander conformiteitsniveau

Bron en doel moeten verschillende streams zijn; de bronpositie wordt hersteld, voorbereidingsfouten laten het doel ongewijzigd en annulering behoudt EPdfOperationCancelled

Het publiceren van het klaargezette resultaat vervangt het doel via de stream-API; een exception bij het afkappen of schrijven van het doel kan partiële uitvoer achterlaten, dus aanroepers die atomische bestandpublicatie nodig hebben schrijven naar een tijdelijk bestand en hernoemen dat na succes

Versleuteling en bestaande handtekeningen vereisen een apart voorbereide, onversleutelde en niet-ondertekende bron; incrementele kleurconversie behoudt de geldigheid van handtekeningen niet

Standaardlimieten zijn 64 MiB per gedecodeerde content-/beeldstream, 512 MiB voor output-staging, 10,000 meldingen en diepte 64, naast de budgetten van de actieve-objectlezer

Het uitvoerbudget telt conservatief bronbytes, klaargezette vervangingsobjecten en gereserveerde xref-/trailer-overhead mee vóór elke update wordt opgeteld; de volledige trailerlengte is vóór serialisatie inbegrepen, en een begrensde uitvoerstream wijst schrijfbewerkingen boven de limiet af voordat zijn logische grootte groeit

Dit begrenst de logische output-staging, niet al het procesgeheugen of de afronding van de geheugenallocator, en de uiteindelijke geserialiseerde grootte wordt vóór publicatie opnieuw gecontroleerd

Echte conversie van RGB-, CMYK- en ICCBased-afbeeldingen, tekst-/vectorconversie, geneste formulieren, behoud van Separation en DeviceN, OutputIntent, gecomprimeerde objectstreams en PDF save/reopen/render zijn geverifieerd met Delphi en FPC op Win32 en 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;