Pdf generation 如何从“创建带标签的PDF”;复杂的;XML文件
我有一个复杂的XML文档。我已经使用iText库从这个XML文档中创建了一个带标签的PDF。我参考了iText-in-Action手册第15章中的示例,但它们仅限于一个简单的XML文件,其层次结构仅为一层 我如何扩展与平面结构一起工作的算法,以便它能够处理这样的分层XML,如下面的示例中所示 “复杂”XML文档示例:Pdf generation 如何从“创建带标签的PDF”;复杂的;XML文件,pdf-generation,itext,tagged-pdf,Pdf Generation,Itext,Tagged Pdf,我有一个复杂的XML文档。我已经使用iText库从这个XML文档中创建了一个带标签的PDF。我参考了iText-in-Action手册第15章中的示例,但它们仅限于一个简单的XML文件,其层次结构仅为一层 我如何扩展与平面结构一起工作的算法,以便它能够处理这样的分层XML,如下面的示例中所示 “复杂”XML文档示例: <?xml version="1.0" encoding="UTF-8" ?> <movies> <movie duration="
<?xml version="1.0" encoding="UTF-8" ?>
<movies>
<movie duration="141" imdb="0062622" year="1968">
<title>2001: A Space Odyssey</title>
<directors>
<director>Kubrick, Stanley</director>
</directors>
<countries>
<country>United Kingdom</country>
<country>United States</country>
</countries>
</movie>
</movies>
2001年:太空漫游
斯坦利库布里克
大不列颠联合王国
美国
我的队友想出了这个问题的解决方案。其思想是创建DefaultMutableTreeNode元素树。每个DefaultMutableTreeNode都将包含一个PDFSStructureElement。树应该代表XML层次结构,例如,考虑前一个注释中的XML代码片段。第一个DefaultMutableTreeNode应该有一个父级为writer.getStructureTreeRoot()的PDFSStructureElement(PdfName-movies)。此节点的子节点应该是另一个PDFSStructureElement(PdfName-movie),其父节点是名为“movies”的PDFSStructureElement,依此类推
一旦完成上述步骤(本质上是结构解析),我们就会得到一个PDFStructureElements树。现在,我们必须解析内容。在解析内容时,我们需要遍历每个树节点。如果解析的节点是叶节点,那么我们需要获取该节点中的pdfstructure元素。否则,如果解析的节点是非叶节点,那么我们需要获取该节点中pdfsstructure元素的PdfName。换句话说,我们可以简单地使用qName变量
if(node is a leaf)
PdfStructureElement element=(PdfStructureElement)node.getUserObject();
canvas.beginMarkedContentSequence(element);
else
canvas.beginMarkedContentSequence(qName);
if(节点是叶)
PDFSStructureElement=(PDFSStructureElement)节点。getUserObject();
canvas.beginMarkedContentSequence(元素);
其他的
canvas.beginMarkedContentSequence(qName);