BDC .. .. .. EMC)然后我添加标记内-6ren">
gpt4 book ai didi

java - "Find Tag from Selection"在标记的 pdf 中不起作用?

转载 作者:行者123 更新时间:2023-12-02 11:20:32 30 4
gpt4 key购买 nike

我已经使用 pdfbox 标记了 pdf。

我是如何被标记的:我没有提取文本和标记,而是将 mcid 添加到现有的内容流中(打开和关闭,例如:/p<< MCID 0 >> BDC .. .. .. EMC)然后我添加标记内容以记录根目录结构。

什么工作:几乎一切都像完全标记的pdf一样正常工作。它也通过了 PAC3 可访问性检查器。

//Adding tags
tokens.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 structure
structureElement.appendKid(markedContent);

currentSection.appendKid(structureElement);

什么不起作用:标记一个 future 后 标记结构中缺少。有一个名为“从选择中查找标签”的选项。不管用。当我选择一些测试并在根结构中按“从选择中查找标签”时,它将是最后一个标签。请在下面的链接中找到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

请帮我解决这个问题。

新问题:
我观察到

当大白鲨阅读我的标记文档时,我正在按下 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

有什么帮助吗?

最佳答案

嵌套问题

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)


你这样做是错误的。例如,请参阅文档中页面内容流的开头:

BT
0 i
/C0_0 18 Tf
41.91 740.175 Td
/H2 <</MCID 0 >> BDC
( \) F M M P 8 P S M E) Tj
ET
/TouchUp_TextEdit MP
BT
/C0_1 14 Tf
EMC
关注文本对象和标记内容的开头和结尾,我们看到您有 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 (BMCEMC, BDCEMC, or BTET) shall be properly (separately) nested. Therefore, the sequences

BMC             BT
BT BMC
… and …
ET EMC
EMC ET

are valid, but

BMC             BT
BT BMC
… and …
EMC ET
BT EMC

are 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 处理器如何执行此操作,在 PDF 规范 ISO 32000-1 的第 14.7.4.4 节“从内容项中查找结构元素”(或 ISO 32000-2 中的第 14.7.5.4 节)中描述:

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 没有 父树 根本没有,并且您的页面不包含 StructParents 在父树中查找的条目。因此,从标记内容到结构树的规定方法是不可能的。
A 父树 已添加到第三个共享 PDF 中, new.pdf .
不正确的父树条目
虽然在 new.pdf你有一个 父树 ,其内容显然不正确:
Screenshot ParentTree
父树 是一个数字树,即整数被映射到这里的东西,所以显然不能有多个条目用于同一个整数键。
此外,查看这些值之一:
Screenshot ParentTree, first entry opened
一看到你声称以下 StructElem 是所有标记的内容 ID 的值:
common value of all content IDs
检查此 StructElem 此外,人们看到它代表最后一页的最后一段。
因此,你的观察

Now instead of "selection not found " it is highlighting the last <P> tag in parent tree. Irrespective of what what we selected.


是可以期待的。如果人们期望任何合理的行为,即 父树 结构破坏得如此严重。
其实不止这个 new.pdf还有 res.pdftagged without altext.pdf父树 s,但所有这些 父树 s像 new.pdf的树一样被折断了.
在分析不需要的行为时,您可能希望开始检查您创建的结构。
父树条目的另一个问题
同时,之前描述的父树中的问题已经解决,不同的页面现在有不同的父结构,父树数组现在引用不同 MCID 的结构元素。
但是,对于某些文档,现在会出现不同的错误,例如“res29_08_19.pdf”。这里的父树是这样开始的:
Screenshot ParentTree
特别是数组中的第一个条目用于 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 页的不一致父树映射列表,如下所示:
preflight report excerpt
与之前的问题相比,仅通过查看父树并不能明确原因,还必须查看结构层次结构。
但是,这样做时,一个特性立即引起了人们的注意:在您的父树中,您没有引用 MCID 的实际父结构元素,而是引用了一个新的结构树节点,该节点声称将结构层次结构中的实际父节点作为它的自己的 parent (实际上不是它的 child 之一)并且还声称拥有有问题的 MCID 作为 child 。
例如,让我们看看第一页上的 MCID 0。在结构层次结构中,您有:
structure hierarchy screen shot
在父树中,您有:
parent tree screen shot
您应该直接从第一页的父树数组中简单地引用对象 238(MCID 0 的结构层次结构父对象),而不是中间的对象 62,它声称对象 238 作为父对象,MCID 0 作为子对象。
报告的不一致可能是由于从父树(在对象 62 中)引用的节点声称是 电话 具有父节点(在对象 238 中)的段落是 跨度 .这是不允许的,一个段落可以包含一个跨度,但不能包含在一个跨度中。

关于java - "Find Tag from Selection"在标记的 pdf 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57591441/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com