Düzenlenebilir Teşhis Belgeleri ve Onarım
SaveLoadedDocumentDiagnostic, inceleme ve denetimli metin düzenlemesi için deterministik, paketlenmemiş bir çıktı üretir; RepairDiagnosticDocument ise düzenlenen dosyayı yapısal olarak geçerli bir PDF'ye geri çevirir
Gidiş-dönüş iş akışı
- Bir belge yükleyin ve
SaveLoadedDocumentDiagnosticçağırın - Nesne dictionary'lerini veya sıkıştırılmamış stream baytlarını;
/Length, xref satırları veyastartxref'i elle tutmaya çalışmadan düzenleyin RepairDiagnosticDocument'ı sınırlı seçeneklerle çağırınTHPDFDiagnosticRepairReport'u inceleyin ve onarılmış hedefi yalnızca metotTruedöndürdüğünde kullanın
Onarım sözleşmesi
- Kaynak, bir PDF header ile başlamalı ve HotPDF'nin ürettiği
%QDF-1.0işaretçisini taşımalıdır - Doğrulanmış indirect nesneler; string'leri, dictionary'leri veya stream payload'larını yeniden kodlamadan fiziksel sırayla kopyalanır
- Direct, indirect, eksik ve bayat stream
/Lengthdeğerleri, ölçülen payload uzunluğuyla değiştirilir - Klasik bir xref tablosu, kanonik bir trailer ve tam
startxrefoffset'i, ölçülen çıktı konumlarından yeniden kurulur - Trailer; geçerli
/Info,/IDve/Encryptdeğerlerini korur ve/Root'u tek doğrulanmış Catalog'a bağlar - Hedef, kardeş bir geçici dosya üzerinden yazılır ve istenen yolun yerine yalnızca tüm denetimler başarılı olduktan sonra geçer
Katı reddetme
Onarım; mükerrer nesne numaraları, çoklu veya eksik Catalog nesneleri, bozuk trailer referansları, nesneler arası yorum dışı baytlar, geçersiz nesne grameri, nesne veya girdi sınırları, on haneden geniş klasik xref offset'leri ve katı yeniden yükleme doğrulama hataları karşısında fail closed davranır
Doğrulanmış nesnelerin içindeki işaretçiler atlanır; böylece string'lerdeki ve kodlanmış stream payload'larındaki nesne benzeri metinler xref girdisine dönüşmez
Sınırlı performans
Tarayıcı, kısa bir carry ile 1 MiB'lik pencereler okur, nesne aralıklarını dosya stream'leri arasında doğrudan kopyalar ve yalnızca doğrulanmış nesne meta verisiyle birlikte sınırlı dictionary sorgularını tutar
MaxInputBytes, MaxObjectCount ve MaxObjectNumber; taramayı, saklanan meta veriyi ve üretilen xref satırlarını, çıktı yayınlanmadan önce sınırlar
Pascal örneği
var
Options: THPDFDiagnosticRepairOptions;
Report: THPDFDiagnosticRepairReport;
begin
Options := THPDFDiagnosticRepairOptions.Default;
Options.MaxInputBytes := Int64(16) * 1024 * 1024 * 1024;
if not THotPDF.RepairDiagnosticDocument(
'edited-diagnostic.pdf',
'repaired.pdf',
Options,
Report
) then
raise Exception.Create(string(Report.Diagnostic));
end;