跳到主要內容區塊

計資中心電子報C&INC E-paper

技術論壇

使用ASP .NET (C#) 產生PDF檔的好幫手—iTextSharp library (下)
  • 卷期:v0016
  • 出版日期:2011-03-20

作者:唐瑤瑤 / 臺灣大學計算機及資訊網路中心程式設計組程式設計師


上一期的計中電子報中,我們向各位介紹了iTextSharp 這個十分強大且免費的PDF函式庫,相信各位對它應該已經不陌生了。接下來我們就針對幾項進階功能做介紹,包含Direct content、Header、Footer、Barcode及JavaScript等互動功能。
 

Part 1:Direct content
Direct content 是指在頁面的絕對位置中插入內容。範例中會使用到的是PdfContentByte及ColumnText 2個類別。首先於頁面中加入一張圖檔,接著我們在圖片的【上方 upper layer】寫字,在圖片的【下方 lower layer】畫一個矩形並填滿色彩。主要使用到的方法是PdfWriter.DirectContent 及PdfWriter.DirectContentUnder:

 

產生的結果如下圖:

 

接下來我們在頁面絕對座標位置上任意畫幾條直線:

 

如果是利用ColumnText 顯示文字內容於頁面絕對位置,請參考下列程式碼:

 

產生的結果如下圖:

 

Part 2:Header及Footer
如果我們希望針對每一頁都能加上Header或Footer時,除了需要用到Part 1 提到的Direct Content,最重要是要處理Page Event,也就是PdfPageEventHelper介面。
可以override 事件如下:OnChapter、OnChapterEnd、OnCloseDocument、OnEndPage、OnGenericTag、OnOpenDocument、OnParagraph、OnParagraphEnd、OnSection、OnSectionEnd、OnStartPage。我們可以針對程式需求,挑出需要使用到的事件來改寫。
在我們的範例程式中,希望能於頁尾顯示頁數及檔案建立時間。所以我們先建立Page Event class,並改寫OnOpenDocument 方法。PdfTemplate 是在每一頁頁尾用來存放總頁數的值:

 

接著override OnEndPage 方法。我們將在每一頁右上角Header顯示”NTU C&INC”文字;左下角Footer顯示頁數與總頁數、右下角Footer 顯示文件產生的日期與時間。使用ShowTextAligned、ShowTextMatrix、ShowText 等方法設定文字顯示的絕對位置,並保留好template 的位置以顯示總頁數:

 

最後 override OnCloseDocument 方法,因為template 的位置已經都保留了,所以只要填入內容即可。

 

 

Part 3:Barcode條碼
iTextSharp 提供直覺的方式來產生各種條碼,包括Barcode、QR Code 等。您也可以利用上一節的Page event 作法於每一頁頁尾產生文件條碼,使用PlaceBarcode 方法即可。程式碼很容易懂,直接複製如下:

 

產生結果如下圖:

 

 

Part 4:利用javascript與使用者互動

完整程式碼如下:

Javascript 程式碼很簡單:

 

產生的結果如下圖:

 

右上角會出現<列印本頁>文字,當滑鼠移上去時會顯示可以click按下的指標,按下滑鼠左鍵後,會跳出alert 視窗:

 

接著按下確定,會出現列印對話方塊:

 

上述這個功能可以用在隱藏menu bar 及tool bar 時,使用者可以於頁面上直接做列印動作。

 

結語

在尚未接觸用程式產生PDF 檔案之前,對PDF只有很粗淺的認識,猜測大致上應該就只是某種檔案格式。真正接觸後才發現真是挖到寶庫,尤其是有這麼強大函式庫可供使用,對程式開發者來說簡直是如虎添翼。還有沒有其他功能尚未介紹?答案是有的,而且還很多,再找時間介紹給各位讀者。各位若有需求,可以先從參考資料中開始找起,也許您會得到更多。
 

參考資料

  1. 主要教學網站
    http://itextpdf.com/index.php http://www.mikesdotnetting.com/Article/80/Create-PDFs-in-ASP.NET-getting-started-with-iTextSharp

  2. 浮水印Watermark 製作http://footheory.com/blogs/donnfelker/archive/2008/05/11/using-itextsharp-to-watermark-write-text-to-existing-pdf-s.aspx

  3. 書籤Bookmark製作
    http://www.mazsoft.com/blog/post/2008/04/30/Code-sample-for-using-iTextSharp-PDF-library.aspx

  4. Footer 製作
    http://stackoverflow.com/questions/1032614/itextsharp-creating-a-footer-page-of