0

我在 PAC3 验证中收到了可能不恰当地使用“表格”结构元素的警告。PDF中的表结构如下在此处输入图像描述

为了传递 PAC3,我现在将表格从父标签拖到一个元素中,如下所示,

例子

我尝试了下面的代码,但它没有工作

PDStructureElement parent=(PDStructureElement)element.getParent();

//parent.setStructureType(StandardStructureTypes.TABLE);
element.insertBefore(element,parent);
element.setParent(parent.getParent());

请帮我解决一下这个。

4

1 回答 1

1

您显示的代码中的主要问题是您尝试插入element自己的孩子而不是其当前祖父母的孩子:

element.insertBefore(element,parent);

你可以让它像这样工作:

if (element instanceof PDStructureElement) {
    PDStructureElement pdStructureElement = (PDStructureElement) element;
    if ("Table".equals(pdStructureElement.getStructureType())) {
        PDStructureNode parentNode = pdStructureElement.getParent();
        if (parentNode instanceof PDStructureElement) {
            PDStructureElement parent = (PDStructureElement) parentNode;
            PDStructureNode newParentNode = parent.getParent();
            if (newParentNode != null) {
                newParentNode.insertBefore(pdStructureElement, parent);
                pdStructureElement.setParent(newParentNode);
                newParentNode.removeKid(parent);
            }
        }
    }
}

(来自MoveInStructureTree辅助方法checkAndMoveTableUp

将此递归地应用到 PDF 的结构树中,可以消除PAC3 验证中可能不恰当地使用“表”结构元素的警告,参见。MoveInStructureTree测试testMoveTableUpTradeSimple1。_

(此代码假定像在您的示例文档中一样,所有 Table 元素都作为单个孩子嵌入到要替换的父元素中。对于其他情况,您必须添加一些健全性检查,并且可能对其他情况进行特殊处理。)

于 2021-09-07T08:49:45.760 回答