iTestSharp的簡單應用

前言

    最近公司某項目要針對一些信息基礎表繪畫成表格的形式而後生成pdf文件,在網上尋找到iTestSharp發現此類庫很強大,雖然園子裏已經有不少大牛寫了關於此插件的使用方法,可是本身也想寫一寫,把本身在項目中用到的記錄下來html

一、準備工做:

首先下載http://sourceforge.net/projects/itextsharp/?source=typ_redirect  dll文件,解壓完以後用到的爲itextsharp.dll。學習

二、環境搭建:

爲了方便,在此就新建控制檯應用程序,而後引入itextsharp.dll文件。字體

三、itextsharp類庫使用介紹:

 Document 文檔,操做內存中的pdf文件
 PdfPCell 單元格
 PdfPTable 表格

 

 

  

生成表格

接下來演示如何生成如下表格:spa

 

 首先實例化Document對象,默認文檔大小爲A4,咱們還可使用Rectangle類來設置文檔的大小。.net

 //實例化
 Document document = new Document(iTextSharp.text.PageSize.A4);
 //設置文檔大小
 Rectangle rect = new Rectangle(600, 450);
 document.SetPageSize(rect);

若是將內存中的Document對象保存到本地硬盤中,應使用PdfWriter類插件

 PdfWriter.GetInstance(document, new System.IO.FileStream("F:\\test.pdf", System.IO.FileMode.Create));

 繪畫表格:3d

        PdfPTable table = new PdfPTable(4);

            PdfPCell header = new PdfPCell(new Phrase("用戶信息"));
            header.Colspan = 3;
            header.HorizontalAlignment = 1;
            table.AddCell(header);

            table.AddCell("姓名");
            table.AddCell("年齡");
            table.AddCell("性別");
            table.AddCell("生日");

            table.AddCell("李雷");
            table.AddCell("23");
            table.AddCell("");
            table.AddCell("1980-01-01");

            table.AddCell("韓梅梅");
            table.AddCell("22");
            table.AddCell("");
            table.AddCell("1982-04-03");

            table.AddCell("隔壁老王");
            table.AddCell("25");
            table.AddCell("");
            table.AddCell("1977-03-12");

            document.Open();
            document.Add(table);
            document.Close();

在Main中Person.GetTable();調用後生成出來效果:code

納尼?李雷,韓梅梅,隔壁老王去哪了?有木有發現全部的漢字都沒法顯示。htm

再看一下Phrase這個類:對象

它是能夠設置字體的,咱們來設置一箇中文字體:

 //設置中文字體
 BaseFont bf = BaseFont.CreateFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
 Font font = new Font(bf);

修改後的代碼:

       PdfPTable table = new PdfPTable(4);
            PdfPCell header = new PdfPCell(new Phrase("用戶信息", font));
            header.Colspan = 4;
            header.HorizontalAlignment = 1;
            table.AddCell(header);

            table.AddCell(new Phrase("姓名", font));
            table.AddCell(new Phrase("年齡", font));
            table.AddCell(new Phrase("性別", font));
            table.AddCell(new Phrase("生日", font));

            table.AddCell(new Phrase("李雷", font));
            table.AddCell("23");
            table.AddCell(new Phrase("", font));
            table.AddCell("1980-01-01");

            table.AddCell(new Phrase("韓梅梅", font));
            table.AddCell("22");
            table.AddCell(new Phrase("", font));
            table.AddCell("1982-04-03");

            table.AddCell(new Phrase("隔壁老王", font));
            table.AddCell("25");
            table.AddCell(new Phrase("", font));
            table.AddCell("1977-03-12");

            document.Open();
            document.Add(table);
            document.Close();

生成的表格:

pdf文檔合併

    public static void Mergre()
        {
            string[] pdflist = new string[2];
            pdflist[0] = "F:\\test1.pdf";
            pdflist[1] = "F:\\test2.pdf";
            PdfReader reader;
            Document document = new Document();
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("F:\\New.pdf", FileMode.Create));
            document.Open();
            PdfContentByte contentByte = writer.DirectContent;
            PdfImportedPage importedPage;
            for (int i = 0; i < pdflist.Length; i++)
            {
                reader = new PdfReader(pdflist[i]);
                int iPageNum = reader.NumberOfPages;
                for (int j = 1; j <= iPageNum; j++)
                {
                    //這個必需要建立新頁,不然下面的內容會與第一頁重合
                    document.NewPage();
                    //讀取舊的pdf,而後添加到新的pdf 中
                    importedPage = writer.GetImportedPage(reader, j);
                    //添加到新的pdf中可設置位置
                    contentByte.AddTemplate(importedPage, 0, 0);
                }

            }
            document.Close();
        }

       上面只是簡單的應用,在實際項目中表格的樣式,大小等問題還需一點一點去實現,API中有不少方法本身看看即可熟練運用,在學習過程當中我也看了博友們的文章,感謝你們的分享,若是應用iTestSharp實現更復雜的功能建議去看這位博友的文章:

http://www.cnblogs.com/CareySon/category/332146.html

相關文章
相關標籤/搜索