gpt4 book ai didi

pdf - iText 的 Alt-Text 添加示例代码不适用于使用 Acrobat 标记的 PDF

转载 作者:行者123 更新时间:2023-12-01 18:09:53 33 4
gpt4 key购买 nike

我正在处理 PDF 辅助功能作业,即在带标签的 PDF 中添加替代文本。我在以下位置获得了相同的示例代码:Add alternative text for an image in tagged pdf (PDF/UA) using iText

非常兴奋我的任务将在很短的时间内完成,无需太多研发。

根据代码创建了一个 Java 项目,当我执行它时,它非常适合 iText 中使用的输入 PDF。

不幸的是,相同的源代码对于使用 Acrobat 标记的 PDF 无法工作

示例输入: iText PDF:no_alt_attribute.pdf & 我的PDF:SARO_Sample_v1.7.pdf

问题:

 // This line works and returns RootElement
PdfDictionary structTreeRoot = catalog.getAsDict(PdfName.STRUCTTREEROOT);

// --> This line always returns NULL,
// Instead of returning the child elements of RootElement
PdfArray kids = structTreeRoot.getAsArray(PdfName.K);
// --> As per the structure Kids are present

比较了两个 PDF 的结构,以下是我的观察结果:

  1. 标签结构 - 两个 PDF 中完全相同 Tagging Structure
  2. 内容结构 - 几乎相同,但在我创建的 PDF 中添加了一些内容。 Content Structure
  3. 标签树结构 - 与标签几乎相同,但有一个主要区别:iText 的 PDF 标签用 /T:StructElem 标记,而在 MY-PDF 中找不到 即使重新标记也无济于事。 Tag Tree Structure

使用我们提供的各种带标签的 PDF 进行验证,所有这些 PDF 都很相似(不含 /T:StructElem)。这些 PDF 已经过验证并通过了辅助功能合规性。

需要一些关于如何使该源代码与我们拥有的 PDF 一起使用的想法。或者,我需要一种方法来在 Acrobat 中标记时自动在 PDF 中添加缺少的 /T:StructElem

任何帮助将不胜感激!

如果需要任何进一步的信息,请告诉我。

注意:我仍然不确定添加此 /T:StructElem 是否有效,因为 PDF 是在 PAC 中传递的。 。如果这确实是一个问题,那么这些 PDF 将不会通过验证,对吧?但这是我发现这两个 PDF 之间的唯一区别。

PS:我使用的 Acrobat 版本是“Adobe Acrobat (Pro) DC”。

-- 谢谢,
SaRaVaNaN

最佳答案

布鲁诺的代码在 referenced answer没有遍历整个结构树,因为他没有实现K内容的所有情况。结构元素K条目指定如下:

The children of this structure element. The value of this entry may be one of the following objects or an array consisting of one or more of the following objects in any combination: [...]

(ISO 32000-2,表 355 — 结构元素字典中的条目)

但是,Bruno 的代码始终假定该值是一个数组:

PdfArray kids = element.getAsArray(PdfName.K);

(很可能他只考虑了相关 PDF 的结构树来实现该代码。)

因此,替换

PdfArray kids = element.getAsArray(PdfName.K);
if (kids == null) return;
for (int i = 0; i < kids.size(); i++)
manipulate(kids.getAsDict(i));

通过类似

PdfObject kid = element.getDirectObject(PdfName.K);
if (kid instanceof PdfDictionary) {
manipulate((PdfDictionary)kid);
} else if (kid instanceof PdfArray) {
PdfArray kids = (PdfArray)kid;
for (int i = 0; i < kids.size(); i++)
manipulate(kids.getAsDict(i));
}

由于您没有共享示例文档,因此我无法测试代码。如果有问题,请分享 PDF 示例。

关于pdf - iText 的 Alt-Text 添加示例代码不适用于使用 Acrobat 标记的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59216032/

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