Авторинг, валидация и поправка на PDF/UA-2 структури
HotPDF може да изгражда, валидира и атомарно поправя смесени семантики на структури от PDF 1.7 и PDF 2.0, като запазва изрична namespace самоличност и ограничена цена на обработката
Авторинг, чувствителен към namespace
AddStructureElement задава стандартното структурно namespace на PDF 2.0, когато роля за PDF/UA-2 го изисква, включително задължителния елемент от най-горно ниво Document
AddStructureElementNS създава елементи с изрични namespace, а AddStructRoleMapNS добавя съпоставяния по име или двумасив, които могат да се разрешават транзитивно през граници на namespace
Namespace речниците са непряки, регистрират се еднократно по URI и се излъчват чрез StructTreeRoot/Namespaces
Атрибути и семантични помощници
| API | Предназначение |
|---|---|
SetStructureAttributeName | Добавя или замества атрибут със стойност-име в речник, специфичен за собственика, и може да обвързва собствени потребители към namespace |
SetStructureAttributeNumber | Добавя или замества структурен атрибут с целочислена стойност като RowSpan или ColSpan |
SetStructureTableCellHeaders | Записва непразен масив Headers, който идентифицира заглавните клетки на таблица по уникални стойности ID |
SetStructurePronunciation | Записва наследяемо име PhoneticAlphabet и точно заместване Phoneme върху структурен елемент на PDF 2.0 |
AddPronunciationLexicon | Вгражда непряк файл application/pls+xml и добавя неговия Filespec към StructTreeRoot/PronunciationLexicon в реда на търсене |
AssociateFileWithStructure | Асоциира непряк Filespec със структурен елемент чрез AF |
AddAccessibleFormula | Създава Formula с Alt, ActualText или и двете |
AddAccessibleMathMLFormula | Създава формула, вгражда описан файл application/mathml+xml, асоциира го със структурата и добавя наследник с MathML namespace |
Ограничена еднофазова валидация
ValidatePDFUA2Structure връща всяка задържана диагностика в масив THPDFUA2ValidationIssues и връща False, когато поне една диагностика има тежест uisError
Валидаторът разрешава role map-ове, чувствителни към namespace, с откриване на цикли, и проверява документа от най-горно ниво, йерархията родител-наследник, обратните връзки към родители, собствениците и ревизиите на атрибути, StructParent на анотации, собствеността на parent tree и OBJR, асоциираните файлове, заглавията, списъците, таблиците, Ruby, Warichu, подсказките за произношение, формулите и MathML
Проверките на документа покриват конкретен език в Catalog-а, статус marked, статус suspect, показвано заглавие, XMP заглавие и PDF/UA идентификация по namespace URI, Unicode символите от частната зона в човешки-четими низове и имената и действията в optional content конфигурации
Проверките на анотациите покриват tab order на страницата, собствеността и ролите в структурата, описанията, състоянията на артефакти, референциите към маркирано съдържание в appearance stream, еквивалентността на rich съдържание, връзките с файлове и забранените подтипове
Проверките на формуляри покриват достигаема самоличност на полета, наследени свойства на полета, контекста и собствеността на уиджети, етикети, алтернативни действия, rich стойности, опции за избор, уиджети с нулева площ, полета с много уиджети и забраната за XFA
Проверките за навигация покриват структурни дестинации с приоритет на SD, отметките, описанията на вградени файлове, вложените числови дървета на етикети за страници, изисквания номер на страница нула, стиловете на етикети и валидните начални номера на етикети
Табличната валидация разгъва положителни размахи на редове и колони само в рамките на MaxObjects, отхвърля пресичащи се клетки и нередовна геометрия на редове или групи от редове, разрешава Headers в рамките на притежаващата таблица, открива дублирани, собствени и циклични заглавни референции и приема неявни асоциации само когато Scope или позицията на първия ред и първата колона ги определят
Списъчната валидация разпознава пълния набор ListNumbering на PDF 2.0, налага семантика на етикетите, проверява ContinuedList и подредените на същото ниво референции ContinuedFrom и отхвърля цикли на продължение или директно истинско съдържание извън Lbl и LBody
Наследниците на Ruby трябва да са RB,RT или RB,RP,RT,RP, на Warichu — WP,WT,WP, записите за произношение запазват PDF типовете си обекти, а всеки лексикон за произношение трябва да бъде непряк вграден Filespec от тип PLS
Сканирането на непряки обекти, дълбочината на обхождане, дълбочината на role map, разгънатите таблични клетки, броят задържани проблеми и обработката на враждебни колекции са ограничени, така че валидацията остава предвидима за недоверени структури
Споделени находки за съответствие
Overload-ът за валидация с THPDFComplianceFindings връща същата диагностика със споделен профил, тежест, стабилен ID на правило, клауза от стандарта, логически път, номер на непряк обект и индекс на страница от нулева база
Детайлният overload за поправка сравнява ограничени находки преди и след поправката, за да идентифицира приложени, неразрешени, върнати назад или провалени действия, и добавя обобщения по семейства поправки с бройки
ComplianceFindingsToJSON запазва детерминистичен ред под версионираната схема hotpdf.compliance.findings.v1 и представя неизвестни местоположения на обект или страница като null
Атомарна структурна поправка
RepairPDFUA2Structure работи в рамките на copy-on-write транзакция върху графа, канонизира дублирани или нерегистрирани namespace речници, презаписва namespace референциите на структури и role map-ове, поправя стандартните структурни namespace, нормализира namespace и ревизии на структурни атрибути и поправя детерминистични дефекти в списъци, таблици, Ruby, Warichu, произношение, алтернативен текст, наследяване на език, ред на заглавия и тагове на артефакти
След промяната същият валидатор проверява кандидат-графа, а политиката по подразбиране връща всички промени назад, когато остане поне една грешка по PDF/UA-2
- Дублирани namespace URI се сливат в един непряк речник само когато съпоставянията на ролите, чувствителни към namespace, съвпадат
- Валидни реферирани namespace могат да се регистрират без повторно сканиране на структурното дърво
- Стандартните собственици на атрибути се отървават от невалидни namespace записи, докато потребителските собственици изискват изричен
CustomAttributeNamespaceURI, когато namespace-ът им не може да се изведе - Отрицателни или дробни ревизии на елементи стават нула, невалидни ревизии в масиви с атрибути стават нула, а сирашките ревизионни записи се премахват
- Разпознаваемото списъчно номериране се възстановява, списъците с етикети получават семантика на номериране, различна от
None, валидните референции за продължение получаватContinuedList=true, а единично misplaced заглавие се мести на първа позиция - Невалидните таблични размахи стават единица,
Scopeсе премахва от клетките с данни, а невалидни, междутаблични, собствени или дублирани записиHeadersсе премахват, без да се измислят заместващи асоциации - Наследниците на Ruby и Warichu се преподреждат само когато точният изискван мултимножество вече съществува
- Неправилно типизираните подсказки за произношение се премахват, невалидните лексиконни референции се режат, а валидните вградени лексиконни потоци получават MIME подтипа PLS
- Липсващите стойности
Altизползват съществуващо заглавие, разширяващ текст или извлечен текст от същия MCID, преди всеки fallback от извикващия, а празната стойност по подразбиране никога не измисля описания - Валиден корен или доставен от извикващия BCP-47 език може да стане език на Catalog-а, така че излишните или невалидни записи на наследниците да наследят безопасно
- Дефекти на първото заглавие и пропуснати нива се закриват в реда на документа, с опционални независими начала на заглавия в
DocumentFragment - Структурните роли
Artifactсе съгласуват с таговете на маркираното си съдържание в producer съдържанието на страницата и в заредените content stream-и - Двусмислена таблична геометрия, липсващи семантични наследници, конфликтни идентификатори и неразрешени семантики на четене остават грешки и задействат rollback по подразбиране
MaxObjectsиMaxRepairsсе провалят затворено, преди недоверени графи да наложат неограничена работа
Политика на валидация
Започнете с THPDFUA2ValidationOptions.Default и променете само решенията, специфични за процеса
THPDFUA2HeadingPolicy избира третирането на заглавия, THPDFUA2IssueSeverity различава предупреждения от грешки, а всяка THPDFUA2ValidationIssue носи стабилен код, път в структурата, тежест и съобщение
HeadingPolicyможе да игнорира пропуснати нива, да ги пази като предупреждения или да изисква последователни ниваAllowDocumentFragmentHeadingStartsнулира контекста на заглавия вDocumentFragmentCheckDocumentSemanticsвключва проверки на Catalog, метаданни, optional content и вградени файловеCheckHumanReadableStringsотхвърля Unicode символи от частната зона в потребителски низове на документаCheckAnnotationSemanticsвключва проверки за собственост, роля, appearance, описание и флагове на анотацииCheckFormSemanticsвключва проверки за AcroForm, полета, уиджети, стойности, етикети, действия и опцииCheckNavigationSemanticsвключва проверки за структурни дестинации, отметки и етикети на странициRequireListLabelsизисква единLblза номерираните елементи на списъкRequireExplicitTableHeaderAssociationsдокладва клетки с данни, които разчитат само на изведен обхват на заглавияCheckListSemanticsвключва пълни проверки за PDF 2.0 номериране, продължение, заглавие, етикет, тяло и поставяне на съдържаниеCheckTableSemanticsвключва ограничени проверки за мрежа, размах, групи редове, обхват на заглавия и локални за таблицата асоциацииCheckRubyWarichuSequencesвключва точни проверки на последователностите от директни наследници за източноазиатски inline структуриCheckPronunciationHintsвключва проверки на структурни подсказки и вградени PLS лексикониRequireStructureAssociatedFilesизисква всеки асоцииран файл на каталога да е достижим от структурен елементRequireFormulaTextAlternativeизисква текстови алтернативи за формули, освен когато има асоцииран MathMLMaxObjectsограничава сканирането на непряки обекти, преди обхождането да започнеMaxIssuesограничава задържаните диагностики, без да скрива финалния успех или неуспех
Препоръчителен процес
- Включете
PDFUACompliance, изберетеPDFUAPart = 2и задайтеLangпредиBeginDoc - Създайте един
Documentот най-горно ниво и изграждайте семантични наследници със стандартни или изрично namespaced роли - Регистрирайте анотации и асоциирани файлове чрез структурните им помощници, записвайте подсказки за произношение с
SetStructurePronunciationи добавяйте PLS файлове в желания ред на търсене сAddPronunciationLexicon - Пуснете
ValidatePDFUA2StructureпредиEndDoc, когато приложението има нужда от цялата диагностика наведнъж, извикайтеRepairPDFUA2Structureза детерминистични поправки на namespace, структура и достъпност, и изберете overload-а със споделени находки, когато CI иска стандартен JSON - Разрешете всяка грешка преди изхода, защото
EndDocналага и строгата политика по подразбиране за PDF/UA-2 документи
Вижте също: Автоматична PDF/UA структура от дървета на оформлението, THPDFUA2ValidationOptions, ValidatePDFUA2Structure, RepairPDFUA2Structure, ComplianceFindingsToJSON, SetStructurePronunciation, AddPronunciationLexicon, AddStructureElement, BeginTaggedContentForStructure, AppendStructureMarkedContent