您显示的代码中的主要问题是您尝试插入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 元素都作为单个孩子嵌入到要替换的父元素中。对于其他情况,您必须添加一些健全性检查,并且可能对其他情况进行特殊处理。)