Yüklenmiş PDF'ten PDF/A-4 Raster Dönüşümü
HPDFArchivalConversion, yüklenmiş bir THotPDF belgesinin görünür sayfa içeriğinden, katı native rendering ve verilen sRGB ICC profile'iyle yeni bir PDF/A-4 belgesi oluşturur
Her çıktı sayfası, istenen DPI'da kayıpsız sıkıştırılmış bir RGB raster image içerir; orijinal görünür boyutlar, crop, rotation ve UserUnit çıktı sayfası geometrisine yansıtılır
Gömülü orijinal yazı tipleri, metin operator'leri, vektör path'leri, görseller, OCR katmanları ve görünür anotasyon veya widget görünilmleri hayatta kalmalıysa ayrı metin ve vektör koruyan profili kullanın; raster profili o yapıları korumaz
Giriş noktaları
function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
Önce kaynağı yükleyin ve caller'a ait input stream'i, kaynak belge yok edilene kadar canlı tutun
Sıradan arşiv yayınlaması için file entry point'i kullanın: hedef dizinde exclusive bir geçici dosya oluşturmadan önce mevcut hedefi kaynak takma adlarına karşı yoklar, dönüşümün tamamını doğrular, dosyayı flush eder ve hedefi MOVEFILE_REPLACE_EXISTING ve MOVEFILE_WRITE_THROUGH ile MoveFileEx üzerinden değiştirir
Dönüşüm, rendering, doğrulama, iptal ve yayınlama hataları mevcut hedef dosyayı korur ve geçici çıktıyı kaldırır
Stream entry point, sıfır konumunda boş ve seekable bir destination ister ve girdinin bilinen takma adlarını IsLoadedSourceStreamAlias üzerinden reddeder; baytları yalnızca hazırlanan çıktının tamamı native doğrulamayı geçtikten sonra yayınlar
Destination yazma hatası, en iyi çabayla boş bir stream'e sıfırlama tetikler; ancak keyfi bir device veya custom stream bu sıfırlamayı reddedip kısmi yazıyı koruyabilir — dosya yayınlamasının atomik olması gerektiğinde file entry point'i kullanın
Seçenekler ve kaynak sınırları
| Seçenek | Varsayılan | Anlam |
|---|---|---|
DPI | 150 | İstenen fiziksel çözünürlük, kabul edilen aralık 36 ila 1200 |
MaxPages | 1000 | Yüklenmiş kaynak sayfa sayısı üst sınırı |
MaxPixelsPerPage | 40,000,000 | Sayfa pikseli ve tekil source-image pikseli üst sınırı |
MaxTotalPixels | 500,000,000 | Birikmiş çıktı raster pikseli üst sınırı |
MaxRasterBytes | 256 MiB | Sayfa veya source-image raster tahsisi üst sınırı, piksel başına dört bayt varsayılarak ihtiyatla denetlenir |
MaxOutputBytes | 256 MiB | Hazırlanan PDF boyutu üst sınırı, stream tahsisinden ve yazmalardan önce uygulanır |
MaxDecodedStreamBytes | 64 MiB | Her filter zincirini, sayfa başına birleşik content preflight'ı, tekil native stream-read callback'lerini, tekil kodlanmış source-image stream'lerini ve native çıktı doğrulayıcısını sınırlar |
MaxTotalDecodedBytes | 256 MiB | Dönüşüm boyunca ek native filtered-decoder işini, sayfalar arası birleşik content preflight'ı ve sayfalar arası birikmiş native stream-read callback'lerini sınırlar |
MaxInputObjects | 200,000 | Zaten yüklenmiş indirect object sayısı üst sınırı |
CancellationToken | nil | İş öncesinde, native rendering ve decoding sırasında ve yayından önce denetlenen ödünç token |
Checkpoint | nil | Dönüşüm ve native kaynak checkpoint'lerinde nil sender ile çağrılan ödünç senkron callback; kaynak belgeye yeniden giriş yapmayın |
Decode limitleri decoder işini sayar ve aynı filtered stream'den preflight, display-list derlemesi ve rendering sırasında yeniden ücret alabilir; bütçeyi artırmak caller'ın açık kararıdır
Pixel preflight, hem istenen fiziksel çözünürlüğü hem de UserUnit ölçeklemesi sonrası native renderer'ın tamsayı DPI'ını kapsar; çok küçük birimler ek raster pikseller gerektirebilir ve kesirli sayfa boyutları, image fiziksel sayfaya geri eşlendiğinde subpixel resampling'e yol açabilir
Dönüşüm sınırları kaynak yüklendikten sonra uygulanır; güvenilmeyen girdi kabul ederken loader'ın kendi kaynak limitlerini yapılandırın
Kaynak object graph korunur; read cache'ler ve decode istatistikleri dolabilir. Rendering ayarları, cancellation token, backend ve decode-bütçe ayarları başarıda da başarısızlıkta da geri yüklenir
Converter bu ayarları geçici olarak uygularken kaynak belgeye exclusive erişim verin
Rendering ve renk
Her sayfa, native fallback tanısı, düşürülmüş tanı veya eksik kaynak hatası olmadan render edilmelidir; desteklenmeyen içerik, eksik bir sayfa yayınlamak yerine dönüşümü reddeder
ICC argümanı; tanınan bir matrix/TRC gösterimi, standart D50'ye uyarlanmış primaries ve IEC sRGB transfer fonksiyonuyla sRGB'yi tanımlamalıdır; ilgisiz RGB profile'lar, CMYK profile'lar, bozuk profile'lar ve LUT tabanlı profile'lar reddedilir
Çıktı, sRGB OutputIntent ve PDF/A-4 XMP metadata'sı bildirir; kaynakta zaten yapılandırılmış özel bir proof veya çıktı ICC iş akışı, image-decoder ayarları sRGB olarak güvenle yeniden yorumlanamayacağı için reddedilir
FPC derlemesi, LittleCMS'in mevcut olduğu native codec köprüsünü gerektirir ve bu color-management backend'i eksikse dönüşümü reddeder
Kodlanmış inline image'lar dahil JPEG ve JPX image stream'lerinin gerçek codestream boyutları native pixel decoding'den önce incelenir ve PDF image dictionary ile uyuşmak zorundadır
JPEG, sınırlı 8-bit baseline, extended sequential ve progressive header'larını kabul eder; JPX, sınırlı J2K SIZ header'larını ve en fazla dört component'i ve component hassasiyeti en çok 16 bit olan sıradan uzunluktaki JP2 box'ları kabul eder
Kodlanmış codec'ler kaynak pikseli başına 64 baytlık ek ihtiyatlı bir working budget'a sahiptir ve JPX tile metadata'sı hem MaxInputObjects hem de MaxRasterBytes içindeki tile başına 1024 bayt ile sınırlıdır; bu yüzden varsayılan 256 MiB raster bütçesi en fazla 4,194,304 kodlanmış kaynak pikseline izin verir ve caller'lar daha büyük image'lar için bunu açıkça artırabilir
JBIG2 dönüşümü reddedilir, çünkü iç region ve sembol tahsisleri mevcut header API'sinden sınırlanamaz; nonterminal image codec'ler, extended-length JP2 box'ları, desteklenmeyen wrapper'lar ve DecodeParms taşıyan sarmalanmış codec stream'leri de reddedilir
CCITT fax parametreleri bildirilen pozitif image boyutlarını korumak zorundadır; dictionary'den farklı çıkan DecodeParms.Columns ve Rows override'ları, bilinmeyen Rows=0 dahil, native decoding'den önce reddedilir
Bu denetimler, converter'ın kabul ettiği bilinen header ve tahsis profile'larını sınırlar ve her native decoder için eksiksiz bir process-memory sandbox vaat etmez
Bilgi ve kalite kaybı
- Vector içerik, font'lar, transparency ve kaynak renk uzayları RGB sayfa piksellerine dönüşür; artırılmış DPI görsel detayı iyileştirir ama bellek kullanımını ve dosya boyutunu büyütür
- Çıktı metni aranabilir veya seçilebilir değildir; text layer veya OCR çıktısı sentezlenmez
- Annotation'lar, annotation appearance'ları, form alanları, widget appearance'ları ve görünür imza appearance'ları sayfa raster'ına gömülmek yerine atlanır
- Dijital imzalar, gömülü dosyalar, script'ler, action'lar, bookmark'lar, etkileşimli kontrol olarak layer'lar, yapısal tag'ler ve orijinal belge kimliği korunmaz
- Sonuç; vector düzenlenebilirliğini, orijinal imza geçerliliğini, PDF/UA erişilebilirliğini veya kaynak belge semantiğini korumaz
THPDFArchivalConversionReport; başarı ve iptal durumunu, kaynak ve render edilen sayfa sayılarını, raster pikselleri, çıktı baytlarını, kaldırılan annotation/form/attachment sayılarını, bir failure tanısını ve native doğrulama bulgularını sağlar
FailureKind; afkNone, afkConversion, afkBudget ve afkCancelled değerlerini ayırır; tipli converter bütçe hataları ayrıca BudgetMetric, BudgetObserved ve BudgetLimit sağlar
Checkpoint istisnası dönüşümü durdurur ve native failure sonucu üzerinden raporlanır; orijinal callback exception kategorisine ihtiyaç duyan wrapper'lar, converter onu yakalamadan önce saklamak zorundadır
archive.pdfa4.raster JSON ve C ABI işlemi; açık bilgi kaybı onayı gerektirir, kaynak handle'ı korur, doğrulanmış PDF'i ve kayıp raporunu teslim eder ve ihtiyatlı job-bütçe sınırları uygular
Uygunluk doğrulaması
Converter, hazırladığı çıktıyı yeniden yükler ve yayından önce taban PDF/A-4 profile'iyle ValidatePDFA4 gerektirir; native validator, belgelenmiş sınırlı kural setini kapsar ve her ISO 19005-4 gereksiniminin kanıtı değildir
Bağımsız kabul için veraPDF'i --flavour 4 ile kullanabilirsiniz; gömülü olmayan metin, transparency, bir RGB image, bir link, bir signature widget ve bir attachment içeren regression fixture, hiçbir kural veya denetim başarısız olmadan veraPDF 1.30.2'den geçti
Odaklanmış non-GUI regression suite'i için Tests/Delphi/Run-HotPDFArchivalTests.bat dosyasını çalıştırın