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

APIAmaç
SetStructureAttributeNameOwner'a özgü bir dictionary'de name değerli bir attribute ekler veya değiştirir; custom owner'ları bir namespace'e bağlayabilir
SetStructureAttributeNumberRowSpan veya ColSpan gibi tamsayı değerli bir structure attribute ekler veya değiştirir
SetStructureTableCellHeadersTablo başlık hücrelerini benzersiz ID değerleriyle tanımlayan boş olmayan bir Headers dizisi yazar
SetStructurePronunciationBir PDF 2.0 structure element üzerinde kalıtsal bir PhoneticAlphabet adı ve kesin bir Phoneme replacement yazar
AddPronunciationLexiconIndirect bir application/pls+xml dosyası gömer ve Filespec'ini arama sırasına göre StructTreeRoot/PronunciationLexicon'a ekler
AssociateFileWithStructureIndirect bir Filespec'i AF üzerinden bir structure element ile ilişkilendirir
AddAccessibleFormulaAlt, ActualText veya her ikisiyle bir Formula oluşturur
AddAccessibleMathMLFormulaBir 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

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

Önerilen iş akışı

  1. PDFUACompliance'u etkinleştirin, PDFUAPart = 2 seçin ve BeginDoc'tan önce Lang ayarlayın
  2. Tek bir en üst düzey Document oluşturun ve semantik çocukları standard veya açıkça namespace'li rollerle inşa edin
  3. Annotation'ları ve associated file'ları structure helper'ları üzerinden kaydedin, pronunciation ipuçlarını SetStructurePronunciation ile yazın ve PLS dosyalarını istenen arama sırasıyla AddPronunciationLexicon ile ekleyin
  4. Uygulama tüm tanıları tek seferde istiyorsa EndDoc'tan önce ValidatePDFUA2Structure çalıştırın; deterministik namespace, yapı ve erişilebilirlik onarımları için RepairPDFUA2Structure çağırın; CI standart JSON istiyorsa paylaşılan finding overload'unu seçin
  5. Çı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