ConvertToPDFA tek bir çağrıda sıradan bir belgeyi arşivlik bir belgeye dönüştürür: seçilen bölümün yasakladığını kaldırır, gerektirdiğini ekler, belgenin iddia ettiği bölümü bildirir ve sonra sonucu denetler. İddia yalnızca denetim geçtiğinde karşılanmış olarak rapor edilir ve GetPDFAConversionReport neler yapıldığını ve hâlâ neyin yolda olduğunu listeler
O son özellik üzerinde durmaya değer tasarım kararıdır. Denetlemeden iddiayı damgalayan bir dönüştürücü, hiç dönüştürücü olmamasından daha kötüdür, çünkü arşivlik olduğunu söyleyen ama olmayan bir dosya, başka türlü yakalayacak olan sistemlerin tam ortasından dümdüz geçer. Başarısızlık yıllar sonra, bir denetimde, kimsenin yeniden üretemeyeceği bir belgede su yüzüne çıkar
Geçerli görünen bir PDF neden bir PDF/A denetiminde başarısız olur?
Çoğunlukla, bir PDF'in kim tarafından yazıldığını söylediği iki yer ayrıştığı için. Bir doğrulayıcı hem belge bilgi sözlüğünü hem de XMP paketini okur ve ayrışan bir dosyayı reddeder; bu noktada başarısız olan dosyaların çoğunda XMP yarısı hiç yazılmamıştır
RepairDocumentMetadata ikisini uzlaştırır ve kaç girdiyi onardığını döndürür. Yalnızca bir yarısı bir değer taşıdığında diğeri ondan doldurulur, dolayısıyla zaten kaydedilmiş hiçbir şey atılmaz. Hangi kopyanın yetkili olduğuna kimse karar vermek zorunda değildir, çünkü uygulamada bir kopya boştur
Aynı çağrıda daha ince bir durumu yakalayan ikinci bir onarım daha vardır. PDF/A moduna ayarlanmış bir belge, kaybolmuşsa standart tanımlaması geri yüklenir; bu, çağıran kendi XMP paketini sağladığında olur. Bu tanımlama olmadan bir doğrulayıcı dosyayı sıradan bir PDF olarak okur ve iddia edilen bölümün her kuralını karşılanmamış olarak rapor eder; küçük bir nedene dayanan çarpıcı görünümlü bir başarısızlık
var
Lib: TPDFlib;
Repaired: Integer;
begin
Lib := TPDFlib.Create;
try
Lib.LoadFromFile('incoming.pdf', '');
Repaired := Lib.RepairDocumentMetadata;
Log(Format('%d metadata entries brought into agreement', [Repaired]));
Lib.SaveToFile('incoming-fixed.pdf');
finally
Lib.Free;
end;
end;
Dönüştürmeden önce bölümü seçmek
SetPDFAMode ve ConvertToPDFA aynı mod numaralandırmasını paylaşır ve değerlerden üçü yenidir. 9. mod, PDF 2.0 üzerine kurulu bölüm olan PDF/A-4'tür. 10. mod, ek olarak 3B ve zengin ortama izin veren PDF/A-4e ve 11. mod, herhangi bir biçimde gömülü dosyaya izin veren PDF/A-4f'tir
4. bölüm, kendisinden önceki bölümlerden farklı olarak tanımlanır: bölüm numarasıyla ve bölümünün yayımlandığı yılla, düz PDF/A-4 için uyumluluk harfi olmadan ve iki uzantı için E veya F harfiyle. Denetim 4. bölümü tanır, dosyalarını 1.7 yerine PDF 2.0'a göre yargılar ve düzeltme yılını bildirmeyen bir 4. bölüm dosyasını raporlar
4. bölüm belgesindeki her gömülü dosya, belgeyle nasıl ilişkili olduğunu belirtir; 3. ve 4. bölümlerin ikisi de bunu gerektirir. Eskiden sıradan ekleri yakalayan kural budur: ilişki yalnızca birinciden sonraki ekler için yazılırdı ve hiçbir zaman sonuncu için yazılmazdı, dolayısıyla tek ekli bir belge (yaygın durum) hiç ilişki taşımazdı ve tam olarak bu noktada doğrulamada başarısız olurdu
var
Verdict: Integer;
begin
Lib.LoadFromFile('report.pdf', '');
Verdict := Lib.ConvertToPDFA(9); // 9 = PDF/A-4, 10 = 4e, 11 = 4f
Memo1.Lines.Text := Lib.GetPDFAConversionReport;
if Verdict = 1 then
Lib.SaveToFile('report-pdfa4.pdf')
else
Log('conversion incomplete - see the report for what stands in the way');
end;
Dönüşüm raporu ne işe yarar?
Sıradaki adıma ne yapacağınıza karar vermek. Başarılı bir dönüşüm rapor gerektirmez; başarısız olan bir dönüşüm raporun var olduğu bütün nedendir. Bazı engeller bir dönüştürücü tarafından kaldırılabilir, bazıları kaldırılamaz: şifreleme, anlam taşıyan yasak içerik, makinede hiçbir yerde var olmayan bir yazı tipi programı. Rapor, yapılanı kalandan ayırır ve bu "dönüşüm başarısız" ı bir iş kalemine çevirir
Kararı bir toplu iş akışında kapı olarak ele alın. Dönüştürün, kararı okuyun ve dosyayı yönlendirin: geçenleri arşivleyin, geri kalanı raporu eklenmiş bir insana sıraya koyun. Yapmamanız gereken, başarısız bir dönüşümün çıktısını girdiden daha iyi göründüğü için arşive kaydetmektir; çünkü artık denetimin onaylamayı reddettiği bir iddia taşır
Bir dosyanın hâlâ taşıdığı işareti okumak
Herhangi bir şeyi dönüştürmeden önce, belgenin kendisi hakkında ne söylediğini bilin. Var olan standart işaretini okuyamayan bir PDF/A denetimi, ne bildirirse bildirsin her dosyayı 1. bölüme göre yargılar; bu da kusursuz biçimde geçerli bir PDF/A-2 veya PDF/A-3 belgesinin işaret taşımadığı ve sürümünün çok yüksek olduğu şeklinde raporlanması demektir; gerçeğin tam tersi
İşaret, üretici onu bir XMP öğesi veya bir öznitelik olarak yazmış olsa da okunur. Her iki biçim de sıradan XMP'tir ve yalnızca birini kabul etmek diğer üreticilerden gelen dosyaları işaretsiz gösterir. Başka yerde doğrulanan bir belgenin kendi akışınızda neden başarısız olduğunu hiç merak ettiyseniz, burası ilk bakılacak iyi bir yerdir
Arşivlemeden önce arındırma ve bilinmesi gereken hata
Arşiv dönüşümü ve arındırma çoğu zaman birlikte çalışır, çünkü bir güvenlik politikasının kaldırmak istediği içerik ile PDF/A'nın yasakladığı içerik yoğun biçimde çakışır. SanitizeDocument JavaScript'i kaldırır ve son betiği kaldırmak, geride bıraktığı boş ad ağacını da kaldırır; aksi hâlde o ağaç hâlâ okuyucuya belgenin betik taşıdığını söylerdi
O ikinci yarı zor yoldan öğrenildi: paket listesinde tek yöne kayma hatası, arındırmanın betikleri kaldırdığını bildirip hiç kaldırmaması anlamına geliyordu; dolayısıyla arındırılmış bir belge açıldığında hâlâ betiklerini çalıştırıyordu. Tüm bu makalenin dayandığı genel ilke için iyi bir gerekçe de budur: işlemeye güvenmek yerine sonucu doğrulayın, kitaplıkta olduğu kadar kendi akışınızda da
Çevreleyen arşivleme işi için PDF/A ve PDF/UA preflight, gerçek redaksiyon ve içerik kaldırma ve arşivlenen belge aynı zamanda yapılandırılmış fatura verisi de taşıdığında üst veri tarafını ele alan Factur-X için PDF/A-3 XMP uzantı şemaları yazılarına bakın
PDFlibPas, Delphi, C++Builder ve Lazarus için yerel bir Pascal PDF kitaplığıdır, dolayısıyla dönüşüm, onarım ve doğrulamanın tümü zincirde harici bir araç olmaksızın kendi süreciniz içinde gerçekleşir; desteklenen PDF/A bölümleri ve platformlar için PDFlibPas ürün sayfasına bakın