我已经使用pdfbox标记了pdf。如何标记我:我不是在提取文本和标记,而是在现有内容流中添加了mcid(打开和关闭ex:/p > BDC .. .. .. EMC),然后添加了标记内容到文档根目录结构。工作原理:几乎所有功能都可以正常工作,就像完全标记的pdf一样。它也通过了PAC3可访问性检查器。//Adding tagstokens.add(++ind, type_check(t_ype, page));currentMarkedContentDictionary = new COSDictionary();currentMarkedContentDictionary.setInt(COSName.MCID, mcid);if (altText != null && !altText.isEmpty()) { currentMarkedContentDictionary.setString(COSName.ALT, altText);}mcid++;tokens.add(++ind, currentMarkedContentDictionary);tokens.add(++ind, Operator.getOperator("BDC"));// Adding marked content to root structurestructureElement.appendKid(markedContent);currentSection.appendKid(structureElement);什么不起作用:标记一个将来后,标记结构中缺少该标记。有一个名为“从选择中查找标签”的选项。不管用。当我选择一些测试并在根结构中按“从选择中查找标签”时,它将最后一个标签。请在下面的链接中找到pdf。 https://drive.google.com/file/d/11Lhuj50Bb9kChvD0kL_GOHQn4RNKZ0hR/view?usp=sharing父树: https://drive.google.com/file/d/109xhUpqsQSFLPJB2nhXoU9ssMKnyht3G/view?usp=sharing带有标签和父树的额外文档: https://drive.google.com/file/d/1yzZSsjkb5_dGfq1Wu3VxsH73vr3alRmC/view?usp=sharing请帮我解决这个问题。 新问题:我观察到当Jaws读取我标记的文档时,我在Windows机器中按下了诸如ctl + shift + 5之类的控件。它将显示类似的选项下拉>“基于标记结构读取”或>“左上至右下”在两个单选按钮下方 Read curent page Read all pages image you can see. Shift+CTL+5 in adobe dc you can see image here我选择了“基于标签结构阅读并阅读当前页面”,现在下颌不阅读标签结构。但是,如果我对“阅读整个文档”使用相同的文档,那么阅读是否完美?链接到文档: https://drive.google.com/file/d/1CguMHa4DikFMP15VGERnPNWRq5vO3u6I/view?usp=sharing有什么帮助吗? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 嵌套问题How I was tagged: Instead of extract text and tagging I am adding mcid's to the existing content stream (both open and closing ex: /p<< MCID 0 >> BDC .. .. .. EMC)您做错了这个。例如,查看文档中页面内容流的开始: BT0 i/C0_0 18 Tf41.91 740.175 Td/H2 <</MCID 0 >> BDC( \) F M M P 8 P S M E) TjET/TouchUp_TextEdit MPBT/C0_1 14 TfEMC着眼于文本对象和标记内容的开头和结尾,我们看到您有BT ... BDC ... ET ... BT ... EMC但是,根据规范:When the marked-content operators BMC, BDC, and EMC are combined with the text object operators BT and ET (see 9.4, “Text Objects”), each pair of matching operators (BMC…EMC, BDC…EMC, or BT…ET) shall be properly (separately) nested. Therefore, the sequencesBMC BT BT BMC … and … ET EMCEMC ETare valid, butBMC BT BT BMC … and … EMC ETBT EMCare not valid.(ISO 32000-1第14.6节“标记内容”)此问题已在第二个共享PDF res1.pdf中修复。缺少ParentTree和StructParents您的问题关注的问题是There is an option called "Find Tag from Selection" . Is not working.从选择中找到标签实质上意味着您具有某些内容流指令的 MCID ,并且在结构树中搜索该标记了内容ID的结构元素。PDF规范ISO 32000-1的第14.7.4.4节“从内容项中查找结构元素”(或ISO 32000-2的第14.7.5.4节)中描述了PDF处理器如何实现此目的:Because a stream cannot contain object references, there is no way for content items that are marked-content sequences to refer directly back to their parent structure elements (the ones to which they belong as content items). Instead, a different mechanism, the structural parent tree, shall be provided for this purpose. For consistency, content items that are entire PDF objects, such as XObjects, shall also use the parent tree to refer to their parent structure elements.The parent tree is a number tree, accessed from the ParentTree entry in a document’s structure tree root. The tree shall contain an entry for each object that is a content item of at least one structure element and for each content stream containing at least one marked-content sequence that is a content item.您的PDF根本没有那个 ParentTree ,并且您的页面没有一个 StructParents 条目来在父树中进行查找。因此,从标记内容到结构树的规定方法是不可能的。在第三个共享PDF中,添加了 ParentTree new.pdf。不正确的ParentTree条目在new.pdf中,您有一个 ParentTree ,其内容显然不正确: ParentTree 是一棵数字树,即整数在此处映射到某物,因此,对于同一整数键,显然不能有多个条目。此外,查看这些值之一: 有人认为您声称以下 StructElem 是所有已标记内容ID的值: 进一步检查此 StructElem ,您会看到它代表了最后一页上的最后一段。因此,您的观察Now instead of "selection not found " it is highlighting the last <P> tag in parent tree. Irrespective of what what we selected.是人们可以期待的。如果有人期望有任何合理的行为,那就是 ParentTree 结构被严重破坏。实际上,不仅存在这个new.pdf,而且还有带有 ParentTree 的res.pdf和tagged without altext.pdf,但所有这些 ParentTree 却像new.pdf的树一样被破坏了。在分析有害行为时,您可能要开始检查创建的结构。父树条目的另一个问题父树中先前描述的问题已得到解决,不同的页面现在具有不同的结构父,并且父树数组现在为不同的MCID引用了结构元素。但是对于某些文档,现在会发生其他错误,例如“res29_08_19.pdf”。在这里,父树的开始是这样的: 特别是,数组中的第一个条目用于MCID 3,第二个条目用于MCID 4,...根据规范,这是无效的The array element corresponding to each sequence shall be found by using the sequence’s marked-content identifier as a zero-based index into the array.(ISO 32000-1第14.7.4.4节“从内容项中查找结构元素”)因此,第一个条目必须用于MCID 0,第二个条目对于MCID 1,...您反对评论No I used 0 and 1 Mcid's for Artifacts.但作为上述推论,请:不要为没有结构元素的标记内容序列提供MCID! MCID用于在结构层次结构和内容流之间来回移动。如果您在没有结构元素的情况下标记了一条内容,请不要为其赋予MCID。父树条目的另一个问题您再次报告最新文件mathpdf.pdf的问题。确实存在问题。 Adobe Acrobat Preflight报告了5页不一致的父树映射列表,如下所示: 与先前的问题相比,仅通过查看父树并不能弄清原因,还必须查看结构层次。但是,这样做会立即引起您的注意:在父树中,您没有引用MCID的实际父结构元素,而是引用了一个新的结构树节点,该节点声称具有结构层次结构中的实际父节点作为其父节点。自己的 parent (实际上不是 child 的 parent 之一),并且还声称自己所讨论的MCID是 child 。例如,让我们在第一页上查看MCID 0。在结构层次结构中,您具有: 在父树中,您具有: 您应该直接从第一页的父树数组中直接引用对象238(MCID 0的结构层次结构父对象),而不是对象62之间的中间对象(该对象声称该对象238是父对象,而MCID 0是 child )。报告的不一致可能是由于从父树引用的节点(在对象62中)声称是 P 段落,而父节点(在对象238中)是 Span 。这是不允许的,一个段落可以包含一个跨度,但不能包含在一个跨度中。 (adsbygoogle = window.adsbygoogle || []).push({}); 10-06 02:28