簡體   English   中英

如何從“復雜”XML文件創建標記PDF

[英]How to create a tagged PDF from a “complex” XML file

我有一個復雜的XML文檔。 我使用iText庫從這個XML文檔中創建了一個標記的PDF。 我已經參考了iText in Action一書的第15章中的例子,但是它們僅限於一個簡單的XML文件,其層次結構只有一層深度。

如何擴展與平面結構一起使用的算法,以便它可以處理這種分層XML,如下例所示?

示例“復雜”XML文檔:

<?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>

我的隊友想出了解決這個問題的方法。 我們的想法是創建一個DefaultMutableTreeNode元素樹。 每個DefaultMutableTreeNode都包含一個PdfStructureElement。 樹應該表示XML層次結構,例如,考慮前一個注釋中的XML代碼段。 第一個DefaultMutableTreeNode應該有一個PdfStructureElement(PdfName - movies),其父級是writer.getStructureTreeRoot()。 此節點的子節點應該是另一個PdfStructureElement(PdfName - movie),其父節點是名為“movies”的PdfStrucutreElement,依此類推。

完成上述步驟后(基本上是結構解析),我們得到一個PdfStrucutreElements樹。 現在,我們必須解析內容。 在我們解析內容時,我們需要遍歷每個樹節點。 如果解析的節點是葉節點,那么我們需要在該節點內獲取PdfStructureElement。 否則,如果解析的節點是非葉節點,那么我們需要在該節點內獲取PdfStructureElement的PdfName。 換句話說,我們可以簡單地使用qName變量。

 if(node is a leaf) PdfStructureElement element=(PdfStructureElement)node.getUserObject(); canvas.beginMarkedContentSequence(element); else canvas.beginMarkedContentSequence(qName); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM