Java PDFBox:删除标记 PDF 中的父元素
Java PDFBox: Remove the parent element in tagged PDF
我在 PAC3 验证中收到 可能不恰当地使用“Table”结构元素 警告。 TablePDF结构如下,
为了通过 PAC3,我现在将表从父标签拖到一个单独的元素中,如下所示,
我试过下面的代码,但是没有用
PDStructureElement parent=(PDStructureElement)element.getParent();
//parent.setStructureType(StandardStructureTypes.TABLE);
element.insertBefore(element,parent);
element.setParent(parent.getParent());
请帮我解决这个问题。
您显示的代码中的主要问题是您尝试将 element
作为其自身的孩子插入,而不是作为其当前 grand parent 的孩子插入:
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 验证中的 可能不恰当地使用“Table”结构元素 警告,比照。 MoveInStructureTree 测试 testMoveTableUpTradeSimple1
.
(此代码假设在您的示例文档中所有 Table 元素都作为单个孩子嵌入到要替换的 parent 元素中。对于其他情况,您必须添加一些健全性检查并且可能其他情况特殊处理。)
我在 PAC3 验证中收到 可能不恰当地使用“Table”结构元素 警告。 TablePDF结构如下
为了通过 PAC3,我现在将表从父标签拖到一个单独的元素中,如下所示,
我试过下面的代码,但是没有用
PDStructureElement parent=(PDStructureElement)element.getParent();
//parent.setStructureType(StandardStructureTypes.TABLE);
element.insertBefore(element,parent);
element.setParent(parent.getParent());
请帮我解决这个问题。
您显示的代码中的主要问题是您尝试将 element
作为其自身的孩子插入,而不是作为其当前 grand parent 的孩子插入:
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 验证中的 可能不恰当地使用“Table”结构元素 警告,比照。 MoveInStructureTree 测试 testMoveTableUpTradeSimple1
.
(此代码假设在您的示例文档中所有 Table 元素都作为单个孩子嵌入到要替换的 parent 元素中。对于其他情况,您必须添加一些健全性检查并且可能其他情况特殊处理。)