PDFium Delphi Component Docs

Conversione ICC dei colori del documento

ConvertPdfDocumentColours legge la revisione PDF attiva, converte gli operandi dei componenti originali e i campioni immagine tramite un IPdfColourTransform e aggiunge una revisione coerente a uno stream di output separato

Supporta operatori di riempimento e tratto di testo e vettori in DeviceGray, DeviceRGB, DeviceCMYK e ICCBased, risorse di pagina ereditate, alias degli spazi colore predefiniti, Form XObject annidati e immagini raw o con filtri generali con componenti a 8 o 16 bit

Gli array di contenuto condividono un unico parser degli operandi e uno stack dello stato grafico, con uno spazio tra gli stream; q/Q, spazi colore predefiniti e numero dei componenti rimangono associati agli spazi sorgente originali durante tutta la conversione

Gli operandi CMYK provengono dal contenuto PDF e dagli stream immagine, mai dai getter RGB renderizzati; fornire DeviceCMYKProfile per sorgenti DeviceCMYK senza profilo

I profili ICCBased sorgenti vengono risolti nel loro ambito di risorse originale; è supportato solo /Range [0 1 ...] assente o predefinito, mentre gli array /Decode delle immagini sono applicati prima della conversione e rimossi dall'immagine convertita

Le immagini mantengono l'ordine PDF big-endian per i campioni a 16 bit; geometria esatta dei byte ed espansione della destinazione sono controllate prima di allocare i campioni, senza inventare stride o byte di padding

PreserveAllSpotColours è true per impostazione predefinita; altrimenti compilare PreservedSpotColours con i nomi decodificati dei coloranti PDF. Uno spazio Separation o DeviceN viene mantenuto solo se sono selezionati tutti i coloranti elencati

Gli operatori delle tinte piatte mantenute, le funzioni di tinta e le risorse restano intatti; le tinte non selezionate richiedono un backend di conversione dedicato e vengono segnalate come non supportate

Le maschere stencil delle immagini e i dati delle maschere referenziate restano intatti; le maschere color-key, esplicite e le componenti matte delle soft mask richiedono politiche separate

Non sono supportati: immagini DCT/JPX senza decoder dei componenti originali, immagini a 1/2/4 bit e padding delle righe, intervalli ICC non predefiniti, spazi Indexed/Cal/Lab/Pattern, immagini inline, funzioni di shading, programmi dei glifi Type3, colori nei dizionari di annotazione, istruzioni di aspetto predefinito dei form, colori XFA, gruppi di trasparenza, blending non normale, overprint, funzioni di trasferimento grafico e intenti di rendering

I form con risorse proprie devono definire lo spazio colore prima di operandi sc/scn privi di qualificazione; form o immagini condivisi con contesti sorgente ereditati diversi vengono segnalati come non supportati e gli errori memorizzati in cache si propagano a ogni ambito chiamante

FailOnUnsupported è true per impostazione predefinita e conserva la destinazione in caso di errore; impostarlo a false consente aggiornamenti supportati indipendenti, imposta Complete a false e non scrive mai un nuovo OutputIntent per una conversione parziale

Un risultato parziale può mantenere un OutputIntent già presente nella sorgente; OutputIntentWritten indica specificamente se questa operazione ha installato una nuova dichiarazione di destinazione

Un risultato completo incorpora il profilo ICC di destinazione fornito e scrive un OutputIntent con l'identificatore richiesto; questo non certifica la conformità PDF/X, PDF/A o di altro tipo

Sorgente e destinazione devono essere stream distinti; la posizione della sorgente viene ripristinata, gli errori di preparazione lasciano invariata la destinazione e l'annullamento mantiene EPdfOperationCancelled

La pubblicazione del risultato preparato sostituisce la destinazione tramite la sua API di stream; un'eccezione durante il troncamento o la scrittura può lasciare un output parziale. Per pubblicare un file in modo atomico, scrivere in un file temporaneo e rinominarlo dopo il successo

Crittografia e firme esistenti richiedono una sorgente preparata separatamente, non cifrata e non firmata; la conversione incrementale dei colori non mantiene valide le firme

I valori predefiniti consentono 64 MiB per stream di contenuto o immagine decodificato, 512 MiB per la preparazione dell'output, 10,000 segnalazioni e profondità 64, oltre ai limiti del lettore degli oggetti attivi

Prima di accumulare ogni aggiornamento, il limite di output include prudenzialmente i byte sorgente, gli oggetti sostitutivi preparati e lo spazio riservato a xref e trailer; l'intera lunghezza del trailer è inclusa prima della serializzazione e uno stream limitato rifiuta scritture oltre soglia prima di aumentare la propria dimensione logica

Questi controlli limitano la preparazione logica dell'output, non tutta la memoria del processo né gli arrotondamenti di capacità dell'allocatore; la dimensione serializzata finale viene ricontrollata prima della pubblicazione

Conversioni reali di immagini RGB, CMYK e ICCBased, testo e vettori, form annidati, mantenimento di Separation e DeviceN, OutputIntent, stream di oggetti compressi e salvataggio, riapertura e rendering PDF sono verificati con Delphi e FPC su Win32 e Win64

Esempio

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

Dichiarazioni pubbliche

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;