天天看點

【譯】在Asp.Net中操作PDF – iTextSharp-清單

 在前文中,我們已經知道了如何利用iTextSharp建立PDF文檔,設定字型樣式和風格.本文開始講述iTextSharp中的有序清單和無需清單.如果你還沒閱讀我前面的文章,那麼位址是:

    在iTextSharp中清單的建立是通過iTextSharp.text.List對象實作的。清單實質上是iTextSharp.text.ListItem的集合.也就是由ListItem組成的數組.ListItem繼承了Paragraph對象(而Paragraph對象繼承于Phrase,Phrase又繼承于Arraylist),是以生成的每一個List都會自動換行.就如同List在HTML分為<ul>和<ol>一樣,iTextSharp中清單同樣分為有序清單和無序清單.下面我們來直接看如何生成清單的代碼:

   如果你對上面代碼的意思并不了解.那麼為什麼要用”it"引用List的确需要解釋一下.正如代碼所示,it作為引用某些類,因為如果你直接在ASP.Net code-behind模式下工作,你會發現visual studio在引用iTextSharp的ListItem時和也包含ListItem的System.Web.UI.WebControls發生命名空間沖突.這意味着如果僅僅是用如下代碼:

    則會報不明确引用的警告。解決方法是使用完全引用:

   但是使用完全引用又臭又長,是以這裡使用了簡潔引用:

   現在,你就可以使用别名了.

   回到講述我們實際代碼的作用,第一件事是建立一個List對象,并傳入一個布爾類型的參數告訴List生成的是有序或無序清單.預設是False(也就是無序清單),然後為List加入了5個項。第一個項是通過匿名函數傳入String參數類型來建立ListItem并傳入,從第二個開始,則是直接傳入String類型的參數.最後是建立一個Paragraph對象和list對象共同傳入document.

【譯】在Asp.Net中操作PDF – iTextSharp-清單

    如上圖所見,每一個清單項都像Paragraph那樣自己單占一行.還有清單是無序清單,每一個清單項之前都用一個橫杠作為修飾,并且清單沒有縮進。但iTextSharp提供了多種方法允許設定清單使其更加美觀:

    上面第二個參數(float類型)傳入List的構造函數,用于将每一個清單項的縮進設定成10(也就是清單符号和清單項第一個字元的距離。).然後我通過SetListSymbol方法将清單項符号改成更傳統的”.”,最後我将整個清單向右縮進30,現在清單看起來就好多了:

【譯】在Asp.Net中操作PDF – iTextSharp-清單

   如果你使用有序清單并将羅馬數字作為辨別,你可以使用RomanList類:

    由于某些奇怪的理由,傳入RomanList構造函數的第二個參數是一個Int類型的值,第一個參數告訴RomanList究竟使用大寫還是小寫作為行項目辨別:

【譯】在Asp.Net中操作PDF – iTextSharp-清單

     還有一個GreekList類支援使用希臘字元作為清單項目的辨別,還有其它兩個類ZapfDingbatsList 和ZapfDingbatsNumberList,由于他們使用了ZapfDingBats字型,是以這兩個類對清單項符号提供了更多豐富的選項,希臘和羅馬字元作為行項目辨別時,分别不能超過24和26個行項目,而ZapfDingBatsNumberList最多隻能處理10個字元,當字元超出範圍後,清單又會從0開始.

【譯】在Asp.Net中操作PDF – iTextSharp-清單

    清單之間還可以互相嵌套,因為List.Add()方法接受一個Object類型的參數,是以你隻要傳入一個有效的List對象就行。下面代碼首先建立了一個RomanList對象,然後再建立一個有序清單.我們将RomanList對象添加到有序清單上,則RomanList會相對于父有序清單自動向後縮進:

【譯】在Asp.Net中操作PDF – iTextSharp-清單

----------------- 

繼續閱讀