PDFium Delphi Component Docs

Conversión ICC del color del documento

ConvertPdfDocumentColours lee la revisión PDF activa, convierte los operandos originales de componentes y las muestras de imagen mediante un IPdfColourTransform y añade una revisión coherente a un flujo de salida separado

Admite operadores de relleno y trazo de texto y vectores en DeviceGray, DeviceRGB, DeviceCMYK e ICCBased, recursos heredados de página, alias con nombre para espacios de color predeterminados, Form XObjects anidados e imágenes raw o con filtros generales de componentes de 8-bit o 16-bit

Los arrays de contenido comparten un parser de operandos y una pila de estado gráfico, con un espacio entre flujos; q/Q, los espacios de color predeterminados y el número de componentes siguen ligados al espacio original durante la conversión

Los operandos CMYK proceden del contenido PDF y los flujos de imagen, nunca de getters RGB renderizados; proporcione DeviceCMYKProfile para orígenes DeviceCMYK sin perfil

Los perfiles ICCBased se resuelven en su ámbito original de recursos; solo se admite /Range [0 1 ...] ausente o predeterminado, mientras que los arrays /Decode de imagen se aplican antes de convertir y se eliminan de la imagen resultante

Las imágenes mantienen el orden big-endian de PDF para muestras de 16-bit; la geometría exacta de bytes y la expansión del destino se comprueban antes de reservar memoria, sin inventar bytes de stride ni padding

PreserveAllSpotColours vale true por defecto; si no, rellene PreservedSpotColours con nombres de colorantes PDF decodificados, y un espacio Separation o DeviceN solo se conservará si se seleccionan todos sus colorantes

Los operadores de tintas planas conservados, las funciones de tinte y los recursos permanecen intactos; las tintas no seleccionadas requieren un backend específico y se notifican como no compatibles

Las máscaras stencil y sus datos referenciados permanecen intactos; las máscaras por clave de color, explícitas y los componentes matte de soft masks requieren políticas separadas

No se admiten imágenes DCT/JPX sin decodificador de componentes originales, imágenes de 1/2/4-bit y su padding por fila, rangos ICC no predeterminados, espacios Indexed/Cal/Lab/Pattern, inline images, funciones de sombreado, programas glyph Type3, colores de dictionaries de anotaciones, instrucciones de apariencia predeterminada de formularios, contenido de color XFA, grupos de transparencia, mezclas no normales, overprint ni funciones de transferencia o rendering intents

Los Forms con recursos propios deben establecer el espacio de color antes de operandos sc/scn sin calificar; Forms o imágenes compartidos con contextos de origen heredados diferentes se notifican como no compatibles, y los fallos cacheados se propagan a todos los ámbitos que los invocan

FailOnUnsupported vale true por defecto y preserva el destino ante fallos; false permite actualizaciones compatibles independientes, pone Complete a false y nunca escribe un OutputIntent nuevo en una conversión parcial

Un resultado parcial puede conservar el OutputIntent del origen; OutputIntentWritten indica concretamente si esta operación instaló una declaración de destino nueva

Un resultado completo incorpora el perfil ICC de destino y escribe un OutputIntent con el identificador solicitado; esto no certifica PDF/X, PDF/A ni otro nivel de conformidad

Origen y destino deben ser flujos distintos; se restaura la posición del origen, los fallos de preparación dejan el destino intacto y la cancelación conserva EPdfOperationCancelled

Publicar el resultado preparado reemplaza el destino mediante su API de flujo; una excepción al truncar o escribir puede dejar salida parcial, así que, para publicación atómica de ficheros, escriba uno temporal y renómbrelo tras completar la operación

El cifrado y las firmas existentes requieren preparar por separado un origen sin cifrar ni firmar; la conversión incremental de color no conserva la validez de las firmas

Los valores predeterminados permiten 64 MiB por flujo de contenido/imagen decodificado, 512 MiB de preparación de salida, 10,000 informes de incidencias y profundidad 64, además de los límites del lector de objetos activos

El límite de salida incluye de forma conservadora bytes de origen, objetos de reemplazo preparados y reserva para xref/trailer antes de acumular cada cambio; se incluye la longitud completa del trailer antes de serializar, y el flujo limitado rechaza escrituras por encima del límite antes de aumentar su tamaño lógico

Esto limita la preparación lógica de salida, no toda la memoria del proceso ni el redondeo de capacidad del allocator; el tamaño final serializado vuelve a comprobarse antes de publicar

La conversión real de imágenes RGB, CMYK e ICCBased, texto/vectores, Forms anidados, conservación de Separation y DeviceN, OutputIntent, object streams comprimidos y guardado/reapertura/renderizado PDF están verificados con Delphi y FPC en Win32 y Win64

Ejemplo

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

Declaraciones públicas

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;