最近公司某項目要針對一些信息基礎表繪畫成表格的形式而後生成pdf文件,在網上尋找到iTestSharp發現此類庫很強大,雖然園子裏已經有不少大牛寫了關於此插件的使用方法,可是本身也想寫一寫,把本身在項目中用到的記錄下來。html
首先下載http://sourceforge.net/projects/itextsharp/?source=typ_redirect dll文件,解壓完以後用到的爲itextsharp.dll。學習
爲了方便,在此就新建控制檯應用程序,而後引入itextsharp.dll文件。字體
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();
生成的表格:
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實現更復雜的功能建議去看這位博友的文章: