PDF/UA-2 Yapı Yazımı, Doğrulama ve Onarım
HotPDF, açık namespace kimliğini ve sınırlı işlem maliyetini korurken karma PDF 1.7 ve PDF 2.0 yapı semantiğini kurabilir, doğrulayabilir ve atomik olarak onarabilir
Namespace duyarlı yazım
AddStructureElement, PDF/UA-2 rolü gerektirdiğinde PDF 2.0 standard structure namespace'ini atar; zorunlu en üst düzey Document elementi dâhil
AddStructureElementNS, açıkça namespace'li elementler oluşturur; AddStructRoleMapNS ise namespace sınırları arasında geçişli olarak çözülebilen name veya iki öğeli array eşlemeleri ekler
Namespace dictionary'leri indirect'tir, URI başına bir kez kaydedilir ve StructTreeRoot/Namespaces üzerinden yayınlanır
Attribute'lar ve semantik helper'lar
| API | Amaç |
|---|---|
SetStructureAttributeName | Owner'a özgü bir dictionary'de name değerli bir attribute ekler veya değiştirir; custom owner'ları bir namespace'e bağlayabilir |
SetStructureAttributeNumber | RowSpan veya ColSpan gibi tamsayı değerli bir structure attribute ekler veya değiştirir |
SetStructureTableCellHeaders | Tablo başlık hücrelerini benzersiz ID değerleriyle tanımlayan boş olmayan bir Headers dizisi yazar |
SetStructurePronunciation | Bir PDF 2.0 structure element üzerinde kalıtsal bir PhoneticAlphabet adı ve kesin bir Phoneme replacement yazar |
AddPronunciationLexicon | Indirect bir application/pls+xml dosyası gömer ve Filespec'ini arama sırasına göre StructTreeRoot/PronunciationLexicon'a ekler |
AssociateFileWithStructure | Indirect bir Filespec'i AF üzerinden bir structure element ile ilişkilendirir |
AddAccessibleFormula | Alt, ActualText veya her ikisiyle bir Formula oluşturur |
AddAccessibleMathMLFormula | Bir formül oluşturur, açıklamalı bir application/mathml+xml dosyası gömer, onu yapıyla ilişkilendirir ve bir MathML namespace child'ı ekler |
Sınırlı tek geçişli doğrulama
ValidatePDFUA2Structure, tutulan her tanıyı bir THPDFUA2ValidationIssues dizisinde döndürür; en az bir tanı uisError önem derecesine sahipse False döner
Validator, namespace duyarlı role map'leri cycle tespitiyle çözer ve en üst düzey belgeyi, parent-child hiyerarşisini, parent backlink'lerini, attribute owner'larını ve revision'larını, annotation StructParent'ını, parent-tree ve OBJR sahipliğini, associated file'ları, başlıkları, listeleri, tabloları, Ruby'yi, Warichu'yu, pronunciation ipuçlarını, formülleri ve MathML'i denetler
Belge kontrolleri; belirli bir Catalog dilini, marked durumunu, suspect durumunu, görüntülenen başlığı, XMP başlığı ile namespace URI üzerinden PDF/UA kimliğini, insan tarafından okunabilir dizelerdeki Unicode private-use karakterlerini ve optional-content yapılandırma adlarını ve action'larını kapsar
Annotation kontrolleri; sayfa tab sırasını, structure sahipliğini ve rolleri, açıklamaları, artifact durumlarını, appearance-stream marked-content reference'larını, rich-content eşdeğerliğini, dosya ilişkilerini ve yasaklanan subtype'ları kapsar
Form kontrolleri; erişilebilir field kimliğini, kalıtsal field özelliklerini, widget bağlamını ve sahipliğini, etiketleri, alternate action'ları, rich değerleri, choice seçeneklerini, sıfır alanlı widget'ları, çok widget'lı field'ları ve XFA yasağını kapsar
Navigation kontrolleri; SD önceliğli structure destination'larını, outline'ları, embedded-file açıklamalarını, iç içe page-label number tree'lerini, zorunlu sıfır sayfa indeksini, label stillerini ve geçerli label başlangıç numaralarını kapsar
Tablo doğrulaması, pozitif satır ve sütun span'larını yalnızca MaxObjects içinde genişletir, kesişen hücreleri ve düzensiz satır veya satır-grubu geometrisini reddeder, Headers'ı sahip tablo içinde çözer, yinelenen, kendine ve döngüsel header reference'larını tespit eder ve örtük ilişkileri yalnızca Scope veya ilk satır ve ilk sütun yerleşimi belirlediğinde kabul eder
Liste doğrulaması, eksiksiz PDF 2.0 ListNumbering kümesini tanır, label semantiğini zorunlu kılar, ContinuedList ve sıralı aynı seviye ContinuedFrom reference'larını denetler ve continuation döngülerini ya da Lbl ve LBody dışındaki doğrudan gerçek içeriği reddeder
Ruby çocukları RB,RT veya RB,RP,RT,RP, Warichu çocukları WP,WT,WP olmalıdır; pronunciation girdileri PDF object tiplerini korur ve her pronunciation lexicon'ı indirect gömülü bir PLS Filespec olmalıdır
Indirect-object taraması, traversal derinliği, role-map derinliği, genişletilen tablo hücreleri, tutulan sorun sayısı ve düşmanca collection işlemesi sınırlıdır; böylece doğrulama, güvenilmeyen structure tree'leri için öngörülebilir kalır
Paylaşılan compliance bulguları
THPDFComplianceFindings doğrulama overload'u, aynı tanıları paylaşılan bir profile, önem derecesi, kararlı rule ID, standart maddesi, mantıksal path, indirect object numarası ve sıfır tabanlı sayfa indeksiyle döndürür
Ayrıntılı repair overload'u, uygulanan, çözülmemiş, geri alınan veya başarısız repair action'larını belirlemek için sınırlı pre-repair ve post-repair bulgularını karşılaştırır ve sayılmış repair-family özetleri ekler
ComplianceFindingsToJSON, sürümlü hotpdf.compliance.findings.v1 schema'sı altında deterministik sırayı korur ve bilinmeyen object veya sayfa konumlarını null olarak gösterir
Atomik yapı onarımı
RepairPDFUA2Structure, copy-on-write bir graph transaction'ı içinde çalışır; yinelenen veya kayıtlı olmayan namespace dictionary'lerini kanonikleştirir, structure ve role-map namespace reference'larını yeniden yazar, standard structure namespace'lerini onarır, structure attribute namespace'lerini ve revision'larını normalize eder ve deterministik liste, tablo, Ruby, Warichu, pronunciation, alternate-text, dil-kalıtımı, heading-sırası ve Artifact-tag kusurlarını onarır
Değişiklikten sonra aynı validator aday graph'ı denetler; herhangi bir PDF/UA-2 hatası kaldığında varsayılan policy tüm değişiklikleri geri alır
- Yinelenen namespace URI'leri, yalnızca namespace duyarlı role eşlemeleri uyuşuyorsa tek bir indirect dictionary'ye indirgenir
- Geçerli reference verilen namespace'ler, structure tree'i tekrar tekrar taramadan kaydedilebilir
- Standard attribute owner'ları geçersiz namespace girdilerini atar; custom owner'lar, namespace'leri çıkarılamadığında açık bir
CustomAttributeNamespaceURIister - Negatif veya kesirli element revision'ları sıfıra iner, geçersiz attribute-array revision'ları sıfıra iner ve yetim revision girdileri kaldırılır
- Tanınabilir liste numaralandırması geri yüklenir, label taşıyan listeler
Nonedışında bir numaralandırma semantiği alır, geçerli continuation reference'larıContinuedList=truealır ve tek başına yanlış yerde duran caption ilk konuma taşınır - Geçersiz tablo span'ları bire iner,
Scopeveri hücrelerinden kaldırılır ve geçersiz, tablolar arası, kendine veya yinelenenHeadersgirdileri, replacement ilişkileri uydurulmadan kaldırılır - Ruby ve Warichu çocukları, yalnızca tam olarak gereken multiset hâlihazırda mevcutken yeniden sıralanır
- Yanlış tipli pronunciation ipuçları kaldırılır, geçersiz lexicon reference'ları budanır ve geçerli gömülü lexicon stream'leri PLS MIME subtype'ını alır
- Eksik
Altdeğerleri, çağıranın sağladığı herhangi bir fallback'ten önce mevcut bir başlığı, expansion metnini veya aynı MCID'den çıkarılan metni kullanır; boş varsayılan asla açıklama uydurmaz - Geçerli bir root veya çağıranın sağladığı BCP-47 dili Catalog dili hâline gelebilir; böylece gereksiz veya geçersiz descendant girdileri güvenle kalıtım alır
- İlk başlık ve atlanan seviye kusurları belge sırasında kapatılır;
DocumentFragmentiçinde opsiyonel bağımsız başlık başlangıçları desteklenir Artifactstructure rolleri, üretici sayfa içeriğindeki ve yüklü content stream'lerdeki marked-content etiketleriyle hizalanır- Belirsiz tablo geometrisi, eksik semantik çocuklar, çelişen tanımlayıcılar ve çözülemeyen okuma semantiği hata olarak kalır ve varsayılan rollback'i tetikler
MaxObjectsveMaxRepairs, güvenilmeyen graph'lar sınırsız iş zorlayamadan önce fail-closed davranır
Doğrulama politikası
THPDFUA2ValidationOptions.Default ile başlayın ve yalnızca iş akışına özgü kararları değiştirin
THPDFUA2HeadingPolicy başlık işlemeyi seçer, THPDFUA2IssueSeverity uyarıları hatalardan ayırır ve her THPDFUA2ValidationIssue kararlı bir kod, structure path, önem derecesi ve mesaj taşır
HeadingPolicy, atlanan seviyeleri yok sayabilir, onları uyarı olarak tutabilir veya ardışık seviyeler zorunlu kılabilirAllowDocumentFragmentHeadingStarts,DocumentFragmentiçinde başlık bağlamını sıfırlarCheckDocumentSemantics, Catalog, metadata, optional-content ve embedded-file kontrollerini etkinleştirirCheckHumanReadableStrings, kullanıcıya görünen belge dizelerindeki Unicode private-use karakterlerini reddederCheckAnnotationSemantics, annotation sahipliği, rol, appearance, açıklama ve bayrak kontrollerini etkinleştirirCheckFormSemantics, AcroForm, field, widget, value, label, action ve option kontrollerini etkinleştirirCheckNavigationSemantics, structure-destination, outline ve page-label kontrollerini etkinleştirirRequireListLabels, numaralı liste öğeleri için birLblzorunlu kılarRequireExplicitTableHeaderAssociations, yalnızca header scope çıkarımına dayanan veri hücrelerini raporlarCheckListSemantics, eksiksiz PDF 2.0 numaralandırma, continuation, caption, label, body ve content-yerleşimi kontrollerini etkinleştirirCheckTableSemantics, sınırlı grid, span, row-group, header-scope ve tablo-yerel ilişki kontrollerini etkinleştirirCheckRubyWarichuSequences, Doğu Asya inline yapıları için kesin direct-child dizisi kontrollerini etkinleştirirCheckPronunciationHints, structure ipucu ve gömülü PLS lexicon kontrollerini etkinleştirirRequireStructureAssociatedFiles, her catalog associated file'ının bir structure element'ten erişilebilir olmasını zorunlu kılarRequireFormulaTextAlternative, ilişkili MathML mevcut değilse formül metin alternatiflerini zorunlu kılarMaxObjects, traversal başlamadan önce indirect-object taramasını sınırlarMaxIssues, nihai başarı veya başarısızlık sonucunu gizlemeden tutulan tanıları sınırlar
Önerilen iş akışı
PDFUACompliance'u etkinleştirin,PDFUAPart = 2seçin veBeginDoc'tan önceLangayarlayın- Tek bir en üst düzey
Documentoluşturun ve semantik çocukları standard veya açıkça namespace'li rollerle inşa edin - Annotation'ları ve associated file'ları structure helper'ları üzerinden kaydedin, pronunciation ipuçlarını
SetStructurePronunciationile yazın ve PLS dosyalarını istenen arama sırasıylaAddPronunciationLexiconile ekleyin - Uygulama tüm tanıları tek seferde istiyorsa
EndDoc'tan önceValidatePDFUA2Structureçalıştırın; deterministik namespace, yapı ve erişilebilirlik onarımları içinRepairPDFUA2Structureçağırın; CI standart JSON istiyorsa paylaşılan finding overload'unu seçin - Çıktıdan önce her hatayı çözün; çünkü
EndDoc, PDF/UA-2 belgeleri için katı varsayılan policy'yi de uygular
Ayrıca bkz.: Otomatik yerleşim yapısı, THPDFUA2ValidationOptions, ValidatePDFUA2Structure, RepairPDFUA2Structure, ComplianceFindingsToJSON, SetStructurePronunciation, AddPronunciationLexicon, AddStructureElement, BeginTaggedContentForStructure, AppendStructureMarkedContent