嵌套问题
我是如何被标记的:我不是提取文本和标记,而是将 mcid 添加到现有内容流(打开和关闭 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
但根据规范:
当标记内容运算符BMC, BDC, and EMC与文本对象运算符组合BT and ET(参见9.4,“文本对象”),每对匹配运算符(BMC…EMC, BDC…EMC, or BT…ET)应正确(单独)嵌套。因此,序列
BMC BT
BT BMC
… and …
ET EMC
EMC ET
是有效的,但是
BMC BT
BT BMC
… and …
EMC ET
BT EMC
无效。
(ISO 32000-1 第 14.6 节“标记内容”)
此问题已在第二个共享 PDF 中修复,res1.pdf
.
缺少 ParentTree 和 StructParents
你的问题关注的问题是
有一个名为“从选择中查找标签”的选项。不管用。
从选择中找到标签本质上意味着您拥有MCID某些内容流指令,您可以在结构树中搜索引用标记内容 ID 的结构元素。
PDF 规范 ISO 32000-1 的第 14.7.4.4 节“从内容项中查找结构元素”(或 ISO 32000-2 中的第 14.7.5.4 节)描述了 PDF 处理器如何执行此操作:
由于流不能包含对象引用,因此标记内容序列的内容项无法直接引用回其父结构元素(它们作为内容项所属的元素)。相反,一种不同的机制,结构父树,应为此目的而提供。为了保持一致性,作为整个 PDF 对象的内容项(例如 XObject)也应使用父树来引用其父结构元素。
父树是一棵数字树,可从父树文档结构树根中的条目。该树应包含针对作为至少一个结构元素的内容项的每个对象以及针对包含至少一个作为内容项的标记内容序列的每个内容流的条目。
你的PDF没有这个父树根本没有,并且您的页面不包含结构父级在父树中查找的条目。因此,规定的方式从标记内容 to the 结构树是不可能去的。
A 父树在第三个共享PDF中添加了,new.pdf
.
父树条目不正确
而在new.pdf
你有一个父树,其内容明显不正确:
The 父树 is a 数树,即整数是mapped到这里的某个东西,所以显然同一个整数键不能有多个条目。
此外,查看这些值之一:
人们看到您声称以下内容结构元素是所有标记的内容 ID 的值:
检查这个结构元素此外,人们会看到它代表最后一页的最后一段。
因此,你的观察
现在,它不再是“未找到选择”,而是突出显示父树中的最后一个
标记。无论我们选择什么。
这是人们可以期待的。如果人们期望任何合理的行为,也就是说,父树结构破坏得如此严重。
其实不止这个new.pdf
但是也res.pdf
and tagged without altext.pdf
with 父树s,但是所有这些父树s像树一样折断了new.pdf
.
在分析不需要的行为时,您可能需要开始检查您创建的结构。
父树条目的另一个问题
同时,先前描述的父树中的问题已得到解决,不同的页面现在具有不同的结构父级,并且父树数组现在引用不同 MCID 的结构元素。
但对于某些文档,现在会出现不同的错误,例如“res29_08_19.pdf”。这里的父树是这样开始的:
特别是,数组中的第一个条目对应 MCID 3,第二个条目对应 MCID 4,...
根据规范,这是无效的
应使用序列的标记内容标识符作为数组中从零开始的索引来找到与每个序列对应的数组元素。
(ISO 32000-1 第 14.7.4.4 节“从内容项中查找结构元素”)
因此,第一个条目必须针对 MCID 0,第二个条目必须针对 MCID 1,...
您在评论中提出反对
不,我使用 0 和 1 Mcid 来制作工件。
但作为上述的推论:不要将 MCID 赋予您没有结构元素的标记内容序列!MCID 用于在结构层次结构和内容流之间来回切换。如果您标记一段内容而没有其结构元素,则不要为其指定 MCID。
父树条目的另一个问题
您再次报告最新文件的问题数学pdf.pdf https://drive.google.com/file/d/1aD1HGQsEXOovpfWdf7JRNwJhP7tX6pmy/view?usp=sharing。事实上,确实存在一些问题; Adobe Acrobat Preflight 报告不一致父树映射的 5 页列表,如下所示:
与之前的问题相反,仅通过查看父树并不能清楚原因,还必须查看结构层次结构。
不过,这样做会立即引起人们的注意:在父树中,您没有引用 MCID 的实际父结构元素,而是引用了一个新的结构树节点,该节点声称将结构层次结构中的实际父节点作为其自己的父母(实际上并不是其孩子之一),并且还声称自己小时候就有相关的 MCID。
例如,让我们看一下第一页上的 MCID 0。在结构层次中,您有:
在父树中你有:
您应该直接从第一页的父级树数组直接引用对象 238(MCID 0 的结构层次结构父级),而不是中间对象 62,该对象声称将该对象 238 作为父级,将 MCID 0 作为子级。
报告的不一致可能是由于从父树(在对象 62 中)引用的节点声称是P具有父节点(在对象 238 中)的段落,该父节点是Span。这是不允许的,一个段落可以contain一个跨度,但不可能包含 in one.