ConvertPdfDocumentColours, etkin PDF revizyonunu okur, özgün bileşen işlenenlerini ve görüntü örneklerini bir IPdfColourTransform üzerinden dönüştürür ve ayrı bir çıkış akışına tutarlı bir revizyon ekler
DeviceGray, DeviceRGB, DeviceCMYK ve ICCBased uzaylarında metin ve vektör dolgu/kontur operatörlerini, devralınan sayfa kaynaklarını, adlandırılmış varsayılan renk uzayı takma adlarını, iç içe Form XObject'leri ve 8 veya 16 bit bileşenli ham ya da genel filtreli görüntüleri destekler
İçerik dizileri, akışlar arasında bir boşlukla tek bir işlenen ayrıştırıcıyı ve grafik durum yığınını paylaşır; q/Q, renk uzayı varsayılanları ve bileşen sayıları, dönüşüm boyunca özgün kaynak uzaylarına bağlı kalır
CMYK işlenenleri, asla işlenmiş RGB okuyucularından değil PDF içerik ve görüntü akışlarından gelir; profilsiz DeviceCMYK kaynakları için DeviceCMYKProfile sağlayın
Kaynak ICCBased profilleri özgün kaynak kapsamlarından çözümlenir; yalnızca yok olan veya varsayılan /Range [0 1 ...] desteklenir, görüntü /Decode dizileri ise dönüşümden önce uygulanır ve dönüştürülen görüntüden kaldırılır
Görüntüler, 16 bitlik örnekler için PDF büyük uçlu sırayı korur; kesin bayt geometrisi ve hedef genişletme örnek tahsisi öncesinde denetlenir ve stride veya dolgu baytları uydurulmaz
PreserveAllSpotColours varsayılan true değerindedir; aksi halde PreservedSpotColours ögesini çözülmüş PDF renklendirici adlarıyla doldurun ve Separation veya DeviceN uzayı yalnızca listelenen her renklendirici seçildiğinde korunur
Korunan spot operatörleri, ton işlevleri ve kaynaklar olduğu gibi kalır; seçilmemiş spotlar özel bir dönüşüm arka ucu gerektirir ve desteklenmeyen olarak raporlanır
Görüntü şablon maskeleri ve başvurulan maske verileri olduğu gibi kalır; renk anahtarlı maskeler, açık maskeler ve yumuşak maske mat bileşenleri ayrı ilkeler gerektirir
Desteklenmeyen sınırlar arasında özgün bileşen kod çözücüsü olmayan DCT/JPX görüntüleri, 1/2/4 bit görüntüler ve bunların satır dolgusu, varsayılan olmayan ICC aralıkları, Indexed/Cal/Lab/Pattern uzayları, satır içi görüntüler, gölgeleme işlevleri, Type3 glif programları, açıklama sözlüğü renkleri, form varsayılan görünüm yönergeleri, XFA renk içeriği, saydamlık grupları, olağan dışı harmanlama, overprint ile grafik aktarım işlevleri veya işleme niyetleri bulunur
Kendi kaynaklarına sahip formlar, çıplak sc/scn işlenenlerinden önce renk uzaylarını kurmalıdır; devralınan kaynak bağlamı farklı olan paylaşılan formlar veya görüntüler desteklenmeyen olarak raporlanır ve önbelleğe alınan başarısızlıklar her çağıran kapsama yayılır
FailOnUnsupported varsayılan true değerindedir ve başarısızlıkta hedefi korur; false yapmak bağımsız desteklenen güncellemelere izin verir, Complete değerini false yapar ve kısmi bir dönüşüm için asla yeni bir OutputIntent yazmaz
Kısmi bir sonuç, kaynağından mevcut bir OutputIntent'i koruyabilir; OutputIntentWritten özellikle bu işlemin yeni bir hedef bildirimi kurup kurmadığını raporlar
Eksiksiz bir sonuç, sağlanan hedef ICC profilini gömer ve istenen tanımlayıcıyla bir OutputIntent yazar; bu, PDF/X, PDF/A veya başka bir uygunluk düzeyini sertifikalandırmaz
Kaynak ve hedef farklı akışlar olmalıdır; kaynak konumu geri yüklenir, hazırlık başarısızlıkları hedefi değiştirmeden bırakır ve iptal EPdfOperationCancelled değerini korur
Hazırlanan sonucu yayımlamak, hedefi akış API'si üzerinden değiştirir; hedefi kırparken veya yazarken oluşan bir özel durum kısmi çıktı bırakabilir, bu yüzden atomik dosya yayımlamaya ihtiyaç duyan çağırıcılar geçici bir dosyaya yazmalı ve başarıdan sonra yeniden adlandırmalıdır
Şifreleme ve mevcut imzalar, ayrıca hazırlanmış şifrelenmemiş, imzasız bir kaynak gerektirir; artımlı renk dönüşümü imza geçerliliğini korumaz
Varsayılanlar, aktif nesne okuyucu bütçelerine ek olarak çözülmüş içerik/görüntü akışı başına 64 MiB, çıkış aşamalandırması için 512 MiB, 10.000 sorun raporu ve 64 derinliğe izin verir
Çıkış bütçesi, her güncellemeyi biriktirmeden önce kaynak baytlarını, aşamalandırılmış değiştirme nesnelerini ve ayrılmış xref/trailer yükünü ihtiyatlı biçimde kapsar; eksiksiz trailer uzunluğu serileştirmeden önce dahil edilir ve sınırlı bir çıkış akışı, mantıksal boyutunu büyütmeden önce sınırı aşan yazmaları reddeder
Bu, tüm işlem belleğini veya bellek ayırıcının kapasite yuvarlamasını değil mantıksal çıkış aşamalandırmasını sınırlar ve son serileştirilmiş boyut yayımlamadan önce yeniden denetlenir
Gerçek RGB, CMYK ve ICCBased görüntü dönüşümü, metin/vektör dönüşümü, iç içe formlar, Separation ve DeviceN korunumu, OutputIntent, sıkıştırılmış nesne akışları ile PDF kaydetme/yeniden açma/işleme, Delphi ve FPC ile Win32 ve Win64 üzerinde doğrulanır
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);
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;