in src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java [197:232]
private void createParents(COSObject cosElem, COSObject cosParentElem, PDFStructElem elem) throws IOException {
int elemObjectID = (int)cosParentElem.getObjectNumber();
COSDictionary parentElemDictionary = (COSDictionary)cosParentElem.getObject();
PDFStructElem elemParent = structElemCache.get(elemObjectID);
if (isStructureTreeRoot(parentElemDictionary)) {
elem.setParent(currentSessionElem);
currentSessionElem.addKid(elem);
topElems.add(cosElem);
} else if (elemParent != null) {
if (!checkIfStructureTypeIsPresent(parentElemDictionary, StandardStructureTypes.TR)) {
elem.setParent(elemParent);
int position = StructureTreeMergerUtil.findObjectPositionInKidsArray(cosElem);
elemParent.addKidInSpecificOrder(position, elem);
}
} else if (!(checkIfStructureTypeIsPresent(parentElemDictionary, StandardStructureTypes.DOCUMENT)
|| checkIfStructureTypeIsPresent(parentElemDictionary, StandardStructureTypes.PART))) {
elemParent = createAndRegisterStructElem(cosParentElem);
copyElemEntries(cosParentElem, elemParent);
elem.setParent(elemParent);
fillKidsWithNull(elemParent, (COSDictionary)cosParentElem.getObject());
if (parentElemDictionary.getDictionaryObject(COSName.S) == COSName.TR) {
COSBase rowKids = parentElemDictionary.getItem(COSName.K);
createKids(rowKids, parentElemDictionary, elemParent, true);
} else {
int position = StructureTreeMergerUtil.findObjectPositionInKidsArray(cosElem);
elemParent.addKidInSpecificOrder(position, elem);
}
COSObject parentObj = (COSObject)parentElemDictionary.getItem(COSName.P);
createParents(cosParentElem, parentObj, elemParent);
} else {
elem.setParent(currentSessionElem);
int position = StructureTreeMergerUtil.findObjectPositionInKidsArray(cosElem);
currentSessionElem.addKidInSpecificOrder(position, elem);
topElems.add(cosElem);
}
}