iText 制作PDF


前言

由於在MVC項目中需要使用PDF,所以自己抽空也來看看itext,以便於豐富自己的知識吧。在此也簡單的記錄一下,說不定以后可能還用的到。

在此您可以下載你想使用的版本http://sourceforge.net/projects/itextsharp/files/itextsharp/。於是我就下載了現在最新的版本5.4.0。  

下面我就在Asp.Net Mvc 3.0Web項目中創建最簡單的Hello PDF了。當然在項目中要首先引用dll文件。itextsharp.dll

第一步創建一個Document實例

        public Document();
        public Document(Rectangle pageSize);
        public Document(Rectangle pageSize, float marginLeft, float marginRight, float marginTop, float marginBottom);

  當然F12轉到定義就可以看到Document有三個構造函數。

  其中第一個Document給size,color,margins都設置了默認值。查看源代碼,默認為Document(PageSize.A4, 36, 36, 36, 36);

  第一個構造函數以A4頁面作為參數調用第二個構造函數。,第二個構造函數以每邊36磅頁邊距為參數調用第三個構造函數。

  第二個構造函數就可以自定義頁面的大小了,例如

Rectangle pageSize = new Rectangle(144, 720); 
pageSize.BackgroundColor = new Color(0xFF, 0xFF, 0xDE); 
Document document = new Document(pageSize);

  通常,你不必創建這樣的頁面,而可以從下面頁面尺寸中選擇: A0-A10, LEGAL, LETTER, HALFLETTER, _11x17, LEDGER, NOTE, B0-B5, ARCH_A-ARCH_E, FLSA 和 FLSE

  可以直接 Document  document =new Document(PageSize.LEGAL);

  大多數情況下使用縱向頁面,如果希望使用橫向頁面,你只須使用rotate()函數: Document document = new Document(PageSize.A4.rotate());

  當創建一個文件時,你還可以定義上、下、左、右頁邊距: Document document = new Document(PageSize.A5, 36, 72, 108, 180);

說明: 當創建一個矩形或設置邊距時,你可能希望知道該用什么度量單位:厘米、英寸或象素,事實上,默認的度量系統以排版單位磅為基礎得出其他單位的近似值,如1英寸=72磅,如果你想在A4頁面的PDF中創建一個矩形,你需要計算以下數據:

  21 厘米 / 2.54 = 8.2677 英寸

  8.2677英寸* 72 = 595 磅

  29.7 厘米 / 2.54 = 11.6929 英寸

  11.6929英寸* 72 = 842 磅

默認邊距為36磅即半英寸。 如果你修改了頁面尺寸,僅僅影響到下一頁,如果你修改了頁邊距,則影響到全部,故慎用。

第二步 創建Writer實例

   一旦創建了Document,我們可以創建該文檔的多個Writer的實例,所有這些Writer實例均繼承自抽象類“iTextSharp.text.DocWriter”。

  同時還有另外一種情況,你可以用iTextSharp.text.pdf.PdfWriter產生文檔PDF文件。

  Writer類的構造函數是私有的,你只能通過下面的方法創建一個實例:

  public static PdfWriter getInstance(Document document, Stream os);

  你可以通過下面的方法創建一個實例:

  PdfWriter writer = PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));

  但是你幾乎永遠不會用到Writer實例(除非你想創建高級PDF或者希望用一些非常特殊的函數,如ViewerPreferences 或 Encryption)。所以通過下面的辦法得到實例已經足夠了: PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));

  在第一步中創建一個文檔時,第一個參數意義不大,第二個參數可以是任何一種流,到目前為止我們一直使用System.IO.FileStream將Document寫入文件中。

第三步 打開Document

   在你寫入任何實際數據之前,你可能希望通過以下幾種方法寫入一些關於本文檔的摘要:

   public boolean addTitle(String title);

   public boolean addSubject(String subject);

   public boolean addKeywords(String keywords);

   public boolean addAuthor(String author);

   public boolean addCreator(String creator);

   public boolean addProducer();

   public boolean addCreationDate();

   public boolean addHeader(String name, String content) ;

  你可以選擇自己的標題、主題、關鍵字、作者、創建程序,但以下產品信息將始終被添加:

  iTextSharp (或者iTextSharp的引用)和創建時間(實際上這兩種方法是自動調用的)。

 

  打開document前要做的事: 你只能在Open方法調用之前添加摘要,這是iText開發工具提供的一個選擇。 在HTML中,報頭信息被放在文檔前面報頭標識中間,調用Open方法將導致報頭信息寫入流,因而在Document被打開后無法更改這些數據。

  頁面初始化

  Open方法在不同的Witer中同時會產生初始化事件,舉例來說,如果你需要一個水印或者頁眉頁角對象出現在文檔第一頁的開始處,你需要在打開文檔前添加這些,同樣的用於設置該文檔其他頁水印、頁眉、頁角、頁數和尺寸。 當調用下列方法:

  

  public bool setPageSize(Rectangle pageSize)
  public bool Add(Watermark watermark)
  public void removeWatermark()
//setting Header property
  public void resetHeader()
  //setting Footer property
  public void resetFooter()
  public void resetPageCount()
  //setting PageCount property

  產生的結果只能在下一個新頁中看到(當在本頁調用初始化方法時)

  閱讀器參數:

  你可以通過下面的辦法為PDF文件指定一些閱讀器 (如Adobe Reader) 參數: public void setViewerPreferences(int preferences)

  參數可以使用以下一些常量:

     文件被打開時,頁面布局用到下面的其中一個 :

      o PdfWriter.PageLayoutSinglePage – 同時只顯示一個頁面

      o PdfWriter.PageLayoutOneColumn –單列顯示

      o PdfWriter.PageLayoutTwoColumnLeft –雙列顯示,奇數頁在左

      o PdfWriter.PageLayoutTwoColumnRight -雙列顯示,奇數頁在右

        文件打開時,頁面模式用到下面其中之一: 

      o PdfWriter.PageModeUseNone – 既不顯示大鋼也不顯示縮略圖
      o PdfWriter.PageModeUseOutlines – 顯示大綱

      o PdfWriter.PageModeUseThumbs – 顯示縮略圖

      o PdfWriter.PageModeFullScreen – 全屏模式,沒有菜單、windows控件或者其他任何windows可見控件

     PdfWriter.HideToolbar – 當文檔激活時,是否隱藏閱讀程序(如Adobe Reader)的工具條

     PdfWriter.HideMenubar -當文檔激活時,是否隱藏閱讀程序的菜單.

     PdfWriter.HideWindowUI -當文檔激活時,是否隱藏閱讀程序的界面元素,如滾動條、導航條等,而僅僅保留文檔顯示

     PdfWriter.FitWindow – 是否調整文檔窗口尺寸以適合顯示第一頁。

      PdfWriter.CenterWindow – 是否將文檔窗口放到屏幕中央

    在全屏模式下,指定如何顯示界面元素(選擇一個)

      o PdfWriter.NonFullScreenPageModeUseNone -既不顯示大鋼也不顯示縮略圖

      o PdfWriter.NonFullScreenPageModeUseOutlines – 顯示大鋼

      o PdfWriter.NonFullScreenPageModeUseThumbs – 顯示縮略圖 說明:你只能在類PdfWriter中調用這些方法。

    加密

    打開文檔之前還要做的一件事情就是加密(如果你希望該文檔加密),要達到這個目的,你可以使用下面的方法:

     public void setEncryption(boolean strength, String userPassword, String ownerPassword, int permissions);

      strength 是下面兩個常量之一:

        o PdfWriter.STRENGTH40BITS: 40 位

        o PdfWriter.STRENGTH128BITS: 128位 (Acrobat Reader 5.0及以上版本支持)

       UserPassword和ownerPassword 可以為空或零長度, 這種情況下, ownerPassword 將被隨機的字符串代替  Permissions 為下列常量之一:

        o PdfWriter.AllowPrinting
        o PdfWriter.AllowModifyContents

        o PdfWriter.AllowCopy

        o PdfWriter.AllowModifyAnnotations

        o PdfWriter.AllowFillIn

        o PdfWriter.AllowScreenReaders

        o PdfWriter.AllowAssembly

        o PdfWriter.AllowDegradedPrinting

   例如:writer.setEncryption(PdfWriter.STRENGTH128BITS, "userpass", "ownerpass", PdfWriter.AllowCopy | PdfWriter.AllowPrinting);

   打你試圖打開示例代碼0110產生的文件時,將要求輸入密碼('userpass'),因為添加了AllowPrinting參數,你可以打印該文檔而不會發生任何問題。

 

第四步 添加內容

 doc.Add(new Paragraph("您好, PDF !", font));

  當我們創建了兩個writer: writerA 和 writerB:

   PdfWriter writerA = PdfWriter.getInstance(document, new FileStream("Chap0111a.pdf", FileMode.Create));

  PdfWriter writerB = PdfWriter.getInstance(document, new FileStream("Chap0111b.pdf", FileMode.Create));

  我們可以創建兩個有細微差別的文檔:
  writerA.Pause();

   document.add(new Paragraph("This paragraph will only be added to Chap0111b.pdf, not to Chap0111a.pdf"));

  writerA.resume();

  你可以比較文件: Chap0111a.pdf和Chap0111b.pdf的區別

第五步關閉 document

  關閉 document 非常重要, 因為它將關閉正在運行的Writer並將內容寫入文件,該方法在最后被調用,你應該總是要關閉文檔。

 

示例代碼

 

            #region//第一步定義一個Document,並設置頁面大小為A4,豎向 
            Document doc = new Document(PageSize.A4);
            #endregion

            #region//第二步創建Writer實例 
            PdfWriter.GetInstance(doc, new FileStream("D:\\Hello.pdf", FileMode.Create));
            #endregion

            #region 設置PDF的頭信息,一些屬性設置,在Document.Open 之前完成
            doc.AddAuthor("作者aehyok");
            doc.AddCreationDate();
            doc.AddCreator("創建aehyok");
            doc.AddSubject("Asp.Net Mvc 使用 itextsharp 類庫創建PDF文件的例子");
            doc.AddTitle("此PDF由aehyok創建,嘿嘿");
            doc.AddKeywords("Asp.Net Mvc,PDF,iTextSharp,aehyok");
            //自定義頭 
            doc.AddHeader("Expires", "0");
            #endregion 

            #region//第三步打開document
            doc.Open();
            #endregion

            #region//載入字體
            //"UniGB-UCS2-H" "UniGB-UCS2-V"是簡體中文,分別表示橫向字 和 // 縱向字 //" STSong-Light"是字體名稱 
            BaseFont baseFT = BaseFont.CreateFont(@"c:\windows\fonts\SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFT); //寫入一個段落, Paragraph 
            #endregion

            #region///第四步添加內容
            doc.Add(new Paragraph("您好, PDF !", font));
            #endregion

            #region//第五步關閉document
            doc.Close();
            #endregion

            //打開PDF,看效果 
            Process.Start("D:\\Hello.pdf");

  查看生成的PDF的文檔吧

 

實例代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM