veraPDF, hiç RGB çizmeyen bir dosyada, çıplak bir re fi kalibresiz sayan bir dosyada ya da birebir aynı sayfa 1 geçerken düşen sayfa 2de ISO 19005-1 6.2.3.3ü işaretler. PDF/A o kuralları her sayfanın ne boyadığıyla hükmeder; dolayısıyla Delphi için PDFium Component PDF/A doğrulayıcısı, renk ve şeffaflık hükmünden önce her sayfayı formlara, patternlara, gliflere ve annotationlara kadar izler
6.2.3.3 ile 6.2.4.3 aslında ne ister?
ISO 19005-1 6.2.3.3, üç bağımsız kuralı tek paragrafta toplar. Uyumlu bir dosya DeviceRGB ya da DeviceCMYK kullanabilir ama ikisini birden kullanamaz; herhangi bir kalibresiz renk uzayı kullanıldıysa dosya bir PDF/A-1 OutputIntent taşımak zorundadır; DeviceRGB yalnızca profili RGB olan bir intentle, DeviceCMYK ise yalnızca CMYK olanla serbesttir. DeviceGray bu listenin dışında bırakılmıştır; çünkü madde, griyi her iki intent altında dönüştürmeyi açıklamaya devam eder. Intentin kendisi isteğe bağlıdır: 6.2.2, bir dosyanın belirtebileceğini söyler ve yalnızca OutputIntents girdisini sayar; o girdi /S /GTS_PDFA1 taşımalı ve /DestOutputProfileinde geçerli bir ICC profil akışı bulunmalıdır. Dolayısıyla her dosyadan intent isteyen bir denetçi, hiç cihaz rengi boyamayan uyumlu belgeleri reddeder. Bölüm 1, DefaultRGBden ya da DefaultCMYKden söz etmez; ama bunlar üzerinden yeniden eşlenen bir renk, CIE tabanlı bir uzayda çizilir (ISO 32000-1 §8.6.5.6) ve bu, 6.2.3.1in cihaz bağımsızlığı talebini karşılar; 6.2.3.3ün veraPDF test paketi onu kalibre edilmiş sayar ve PDFium Component da maddeyi aynı şekilde okur. Karıştırma yasağı ayrı durur: hem RGB hem CMYK boyayan bir PDF/A-1 dosyası, Default girdileri ikisini de kalibre etse bile düşer. ISO 19005-2 6.2.4.3 o yasağı kaldırır ve her uzayı kendi koşullarıyla kalibre eder; aşağıda sağ sütunun gösterdiği gibi. PDFium Component bu yüzden her bölüm için tek tarama koşturur ve karıştırma denetimini yalnızca PDF/A-1 iddialarına uygular
| Boyanan cihaz uzayı | PDF/A-1 (ISO 19005-1 6.2.3.3) | PDF/A-2 ve sonrası (ISO 19005-2 6.2.4.3) |
|---|---|---|
| DeviceRGB | DefaultRGB kapsamda ya da bir RGB intent; DeviceCMYK ile beraber değil | DefaultRGB kapsamda, ya da bir RGB OutputIntent |
| DeviceCMYK | DefaultCMYK kapsamda ya da bir CMYK intent; DeviceRGB ile beraber değil | DefaultCMYK kapsamda, ya da bir CMYK OutputIntent |
| DeviceGray | DefaultGray kapsamda, ya da herhangi bir PDF/A-1 OutputIntent | DefaultGray kapsamda, ya da herhangi bir PDF/A OutputIntent |
Bir renk uzayı ne zaman kullanılmış sayılır?
Bir renk uzayını kullanmak, onunla bir görüntüleyicinin çizeceği bir yol üzerinde boyamak demektir. Bildirmek yetmez. veraPDF paketi bu noktayı 6.2.3.3ü geçen bir dosyayla koyar: adlandırılmış bir Form XObject, K ile k ile CMYK kurar, sayfanın kaynak sözlüğünde durur, sayfa içeriğinden hiç başvurulmaz ve dosyanın OutputIntenti RGBdir. Dosya genelinde cihaz renk adları araması o dosyayı düşürür ve yalnızca bir CMYK intenti altında DeviceRGB boyayan, iki adın çatışmadığı bir dosyayı kaçırır. PDFium Component bunun yerine çizim grafiğini yürür ve bu yürüyüş, kendi bayt düzeyli PDF/A preflight tarayıcısı üzerine kuruludur. Her sayfadan itibaren yürüyüş, şu kaynakların boyadığı rengi sayar:
- sayfa içerik akışları ve bunların
Doile çağırdığı her Form XObject; iç içe formlar dâhil scnya daSCNile seçilen bir pattern; patternın kendiResourcesu ile okunurTfile seçilen bir Type 3 fontunCharProcsu- görüntü XObjectları ile satır içi görüntüler; kendi sözlüklerinin adlandırdığı renk uzayına göre
- annotation görünüm akışları; sayfanın üstüne boyanır. Bir widgetın
/AP /Nsi bir durum sözlüğü iken her durum sayılır; çünkü fieldı çevirmek,/ASin seçmediği durumu boyar
Erişilebilirliğin incelikli yarısı, içeriğin hiç adını vermediği renktir. q 0 0 10 10 re f Q hiçbir renk işleci içermez. Yine de boyar. Grafik durumunun başlangıç renk uzayı DeviceGraydir (ISO 32000-1 tablo 52); dolayısıyla dolgu, bir PDF/A OutputIntenti ya da DefaultGray yokken her bölüm altında kalibresiz olan DeviceGray siyahtır. Tarama bu yüzden, şimdiye kadar bir şeyin renk seçip seçmediğini izler: rg, k, g ve konturlu biçimleri bir cihaz uzayı seçer, cs ile CS adlandırdıklarını seçer ve herhangi bir seçimden önceye düşen bir dolgu, kontur ya da metin işleci DeviceGray kaydeder. /CS0 cs 1 0 0 /P0 scn çoktan bir uzay seçmiştir; o scn gri değildir
Satır içi görüntüler, renk uzaylarını ve ham örneklerini içeriğin kendisine getirir; bir tarayıcı ikisini de dikkatle okumak zorundadır. /CS bir kısaltma olabilir (G, RGB, CMYK, I) ya da [/Indexed /DeviceRGB 255 13 0 R]e çözülen bir kaynak adı olabilir; bunun tabanı sayılır. ID ile EI arasındaki baytlar keyfi ikilidir; EI görüntüyü yalnızca boşluk karakterleri arasında bitirir, yoksa sıkıştırılmış örneklerin içindeki bir rg hayalet bir işlece dönüşür
% sayfa 1: DefaultRGB kapsam içinde ve hiçbir şeyin çağırmadığı bir XObject
4 0 obj << /Type /Page /Parent 2 0 R /Contents 5 0 R
/Resources << /ColorSpace << /DefaultRGB 9 0 R >>
/XObject << /Fm0 6 0 R >> >> >>
endobj
% sayfa 2: aynı içerik akışı, ColorSpace alt sözlüğü yok
7 0 obj << /Type /Page /Parent 2 0 R /Contents 5 0 R /Resources << >> >>
endobj
5 0 obj << /Length 46 >> stream
1 0 0 rg 72 72 200 100 re f
q 0 0 10 10 re f Q
endstream
endobj
6 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 50 50] /Length 24 >> stream
0 0 0 1 k 0 0 50 50 re f
endstream
endobj
9 0 obj [/ICCBased 10 0 R]
endobj
Girişteki her belirti bu parçadan düşer. /Fm0 hiçbir Do ile karşılaşmaz; onun ksi ilgisizdir. İki sayfadaki çıplak re f, onu kalibre edecek hiçbir şeyi olmayan DeviceGraydir. Sayfa 1deki rg, sayfa 1in boyadığı kaynaklardaki DefaultRGB tarafından kapsanır; sayfa 2, eşlemesi olmayan kaynaklara karşı aynı akışı koşturur, dolayısıyla aynı baytlar orada kalibresizdir. PDF/A-1b iddiası için Beklenen: pvaiMissingOutputIntent ile pvaiMissingIccProfile; sayfa 2nin RGBsi ve iki sayfanın grisi bunları sürükler. Form hiçbir katkı vermez; çağrılsaydı onun CMYKi, üstüne PDF/A-1 karıştırma yasağını da eklerdi
Default renk uzayları, boyayan kaynak sözlüğüne aittir
Default eşlemeleri, geçerli kaynak sözlüğünün ColorSpace alt sözlüğünde aranır (ISO 32000-1 §8.6.5.6); bu, onları kaynakların kendisi kadar yerel kılar; bir belgenin küresel bir defaultu yoktur. Bir görüntü XObjectının kendi Resourcesu yoktur; dolayısıyla sözlüğü /ColorSpace /DeviceCMYK diyen bir görüntü, onu çizen hangi sayfa ya da formun DefaultCMYKiyle kalibre edilir ve iki yerden çizilen aynı görüntü birinde kalibre edilip ötekinde edilmez. Form XObjectları, döşeme patternları ve Type 3 glif yordamları kendi Resourceslarını taşır; bir sayfanın DefaultCMYKi onların içine girmez, ama kendi sözlüklerindeki bir eşleme girer. PDFium Component eşlemeleri aynı şekilde kapsamlar. Hüküm, bir TPdfAValidationResult kaydı olarak döner: saptanan Conformance artı bir Issues kümesi. Bir klasörü sınıflandırmak için bu yeter
uses
System.SysUtils, System.Classes, System.TypInfo, FPdfPdfa;
procedure ReportColorFindings(const FileName: string; Log: TStrings);
const
ColorRules: TPdfAValidationIssues = [pvaiMissingOutputIntent,
pvaiMissingIccProfile, pvaiMixedDeviceColorSpaces, pvaiBlendSpaceUndefined];
var
Source: TFileStream;
Res: TPdfAValidationResult;
Found: TPdfAValidationIssues;
Issue: TPdfAValidationIssue;
begin
Source := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
Res := ValidatePdfACompliance(Source); // 0 konumundan okur
finally
Source.Free;
end;
Log.Add(ExtractFileName(FileName) + ': ' +
GetEnumName(TypeInfo(TPdfAConformance), Ord(Res.Conformance)));
Found := Res.Issues * ColorRules;
for Issue in Found do
case Issue of
pvaiMissingOutputIntent:
Log.Add(' reachable uncalibrated device color, no PDF/A OutputIntent');
pvaiMissingIccProfile:
Log.Add(' no OutputIntent with a DestOutputProfile ICC stream');
pvaiMixedDeviceColorSpaces:
Log.Add(' RGB/CMYK use disagrees with the intent, or PDF/A-1 paints both');
pvaiBlendSpaceUndefined:
Log.Add(' transparent page without a blending color space');
end;
if Found = [] then
Log.Add(' device color and blending rules satisfied');
end;
pvaiMissingOutputIntent ile pvaiMissingIccProfile, yürüyüş kalibresiz cihaz rengine ulaştığında ve hiçbir PDF/A OutputIntenti yokken birlikte görünür. Tek başına bir pvaiMissingIccProfile, bir intentin var olduğunu ama profil taşımadığını gösterir; 6.2.2 onu bir PDF/A intenti olarak kabul etmez. pvaiMixedDeviceColorSpaces, hem PDF/A-1 karıştırma yasağını hem bileşen uyuşmazlığını kapsar: dört bileşenli bir intent altında kalibresiz DeviceRGB ya da üç bileşenli bir intent altında DeviceCMYK. Küme, sayfayı değil kuralı adlandırır; dolayısıyla uzun ya da birleştirilmiş bir belgede hangi sayfaların Default girdileri bildirdiğini, hangilerinin bildirmediğini karşılaştırın
Şeffaf bir sayfa ne zaman kendi karışım uzayına ihtiyaç duyar?
Şeffaf bir sayfa, yalnızca belgenin hiçbir PDF/A OutputIntenti yokken kendi karışım renk uzayına ihtiyaç duyar. ISO 19005-2 6.2.10 (PDF/A-4te 6.2.9), intenti ISO 32000-1 §11.3.4 anlamında varsayılan karışım renk uzayı yapar; intentsizken şeffaflık içeren her sayfa, öznitelik sözlüğü (ISO 32000-1 tablo 147) CS içeren bir Group taşımak zorundadır. O CS de 6.2.4e tabidir; dolayısıyla sRGB bir intenti altında /DeviceCMYK olan bir sayfa grubu, eksik gibi raporlanır ve PDFium Component ikisi için de pvaiBlendSpaceUndefined kaldırır; CalRGB ya da ICCBased bir grup uzayının öyle bir bağımlılığı yoktur. PDF/A-1 bu soruya ulaşmaz; çünkü ISO 19005-1 6.4, şeffaflığı tamamen dışlar
Zor kısım, şeffaflık içerir ifadesidir. ISO 19005-2nin Ek A normatiftir ve sayfadan dışa doğru sınar; dosya genelinde bir /SMask anahtarı ya da /ca değeri sayısı başka bir soruya cevap verir. Bayt aramaları, öteki yerlerdeki şeffaflık söz dizimiyle de çarpışır: yasak geçiş eylemi /S /Trans, her /S /Transparency grubunun önüne geçer ve /Screen hem yasak bir annotation alt türü hem standart bir karışım modudur; bir ad, anahtarıyla eşleşene kadar hiçbir şey ifade etmez. Ek Ayı izleyen PDFium Component, bir sayfadan şunlardan herhangi birine ulaşıldığında onu şeffaf sayar:
- içeriğin
gsile seçtiği ve soft mask sözlüğü, 1in altında bircaya daCA, ya daNormaldışında bir karışım modu taşıyan bir ExtGState; bildirilmiş ama hiç seçilmemiş olan sayılmaz Doile çağrılan ve/Groupu/S /Transparencytaşıyan ya da kendi içeriği bu koşullardan birini karşılayan bir Form XObject; döşeme patternı bir form gibi hükmedilirSMaskakışı ya da 0dan büyük birSMaskInDatadeğeri taşıyan bir görüntü XObjectı- sayfanın metin gösterdiği bir Type 3 fontun bir glif tarifi; bir form gibi hükmedilir
- bir annotation görünüm akışı, her widget durumu dâhil; ve annotation sözlüğünün kendisinde bir karışım modu
Gruplar ayrıca cihaz rengi kuralına geri beslenir ve burada derlem bizi düzeltti. 6.2.4.3ün veraPDF paketi, hiçbir OutputIntenti olmayan, cihaz RGBsi boyayan ve geçmesi beklenen PDF/A-4 dosyaları içerir; çünkü her sayfanın /Groupu kalibre edilmiş bir CS adlandırır. Biz yalnızca izole grupların kalibre edebileceğini varsaymıştık; çünkü izole olmayan bir grup arka planına bileşir — ve bu, sayfa grupları için yanlıştı: tablo 147, çıktı ortamına doğrudan oturtulan bir sayfanın Iden bağımsız olarak fiilen izole olduğunu kaydeder; dolayısıyla onun CSi dikkate alınır. Bir Form XObject ya da annotation görünümünde bayrak gerçekten kararı verir; pakette yalnızca /I truede ayrılan bir geç ve bir düş dosyası var. DeviceGray bir gruptan kalibrasyon almaz; çünkü 6.2.4.3 DefaultGray ya da bir intent ister ve CSi bir cihaz uzayı olan bir grubun kendisinin kalibre olması gerekir. PDFium Component bu yüzden bir sayfa grubunun /Isinin söylediğine bakmaksızın kalibre etmesine izin verir, bir form ya da görünüm grubuna yalnızca izoleken izin verir, griyi grup kalibrasyonunun dışında tutar ve bir grubun adlandırdığı cihaz uzayını yine de denetler
Her sayfada bir grup yerine tek bir OutputIntent
Kendi kodunuz arşivi yazıyorsa, belge düzeyi bir PDF/A OutputIntentile başlayın. Tek bir katalog girdisi DeviceGrayi her yerde kalibre eder, her sayfada eşleşen cihaz uzayını kapsar ve her şeffaf sayfa için varsayılan karışım uzayıdır. Sayfa grupları ile Default girdileri her biri tek bir kaynak sözlüğüne kapsamlanır ve sonradan bir birleştirmenin onlarsız eklediği sayfa, düşen sayfadır. PDF 2.0, sayfa nesnesine OutputIntents ekler (ISO 32000-2 §7.7.3.3 ile §14.11.5); PDFium Component, katalogda yokken PDF/A-4 için o sayfa düzeyi intenti kabul eder; PDF 1.4 ile 1.7 üzerine kurulu 1 ile 3 arası bölümler ise yalnızca kataloğa bakar. RGB içeriği için SaveAsPdfAToStream, PDF/A yazıcının gömülü sRGB ICC profili üzerine kurulu bir katalog intenti ekler ve çıktıyı doğrulamak, içeriğin gerçekten yalnızca RGB olup olmadığını gösterir
uses
System.SysUtils, System.Classes, PDFium, FPdfPdfa;
function ArchiveWithSrgbIntent(const InFile, OutFile: string;
out Remaining: TPdfAValidationIssues): Boolean;
var
Pdf: TPdf;
Opts: TPdfASaveOptions;
Output: TMemoryStream;
Check: TPdfAValidationResult;
begin
Result := False;
Remaining := [];
Pdf := TPdf.Create(nil);
Output := TMemoryStream.Create;
try
Pdf.FileName := InFile;
Pdf.Active := True;
if not Pdf.Active then
Exit; // dosya açılamadı
Opts := TPdfASaveOptions.Default;
Opts.Conformance := pac2b; // PDF/A-1 şeffaflığı baştan yasaklar
// IccProfileData boş kalır: yerleşik sRGB IEC61966-2.1 profili kullanılır
if not Pdf.SaveAsPdfAToStream(Output, Opts) then
Exit;
Check := ValidatePdfACompliance(Output);
Remaining := Check.Issues;
// Yalnızca RGB içerik için beklenen: pvaiMissingOutputIntent ile
// pvaiBlendSpaceUndefined kalkar. pvaiMixedDeviceColorSpaces artık hiçbir
// DefaultCMYK ile kalibre edilmeyen DeviceCMYK boyayan yolu bildirir
if Check.IsCompliant then
begin
Output.SaveToFile(OutFile);
Result := True;
end;
finally
Output.Free;
Pdf.Free;
end;
end;
sRGB intentini atlatabilen bir pvaiMixedDeviceColorSpaces, yürüyüşün erişilebilir bir yolda DeviceCMYK raporlamasıdır; o belge, PDFium Componentin onu PDF/A-2b olarak kabul etmesinden önce onu boyayan sayfalarda bir DefaultCMYK eşlemesine ya da bir CMYK çıktı profiline ihtiyaç duyar