C# ITextSharp生成PDF
阿新 • • 發佈:2019-01-27
ITextSharp就不多介紹了,下面就把遇到的坑一一記錄下來,希望能夠幫助到正在使用它的開發者們。操作pdf的方法都被作者封裝好了,只是沒有註釋和說明,不過大部分的方法屬性還是能看懂的,看不懂的可以反編譯一下。
1.輸入文字不顯示中文,文字換行
2.文字加顏色、字型大小、加粗、斜體、居中等騷操作
3.表格行合併、表格列合併
4.新增新頁面
5.圖片等比縮放、頁面中心顯示
下面程式碼演示:
首先新增幾個dll
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
private void SavePDF(HttpContext context) { Document document = new Document(); //中文字型 string chinese = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "KAIU.TTF"); BaseFont baseFont = BaseFont.CreateFont(chinese, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); //文字大小12,文字樣式 Font cn = new Font(baseFont, 12, Font.NORMAL); PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"D:\temp.pdf", FileMode.Create)); document.Open(); //最後一個引數是顏色,這裡可以是rgb格式,也可以是預設定義的 var title = new Paragraph("\n 這是一條標題0.0 hello ", new Font(baseFont, 14, Font.BOLD, BaseColor.RED)); //居中 title.Alignment = Element.ALIGN_CENTER; document.Add(title); Paragraph p = new Paragraph(" \n this is Second title \n ", cn); //Phrase p = new Phrase("這是一條標題0.0 hello", cn); p.Alignment = Element.ALIGN_CENTER; document.Add(p); //新增表格 PdfPTable table = new PdfPTable(3); PdfPCell cell = new PdfPCell(); table.AddCell("Row"); cell = new PdfPCell(new Phrase("Cell")); cell.Colspan = 2; table.AddCell(cell); table.AddCell("row"); cell = new PdfPCell(new Phrase("Cell")); cell.Colspan = 2; table.AddCell(cell); cell = new PdfPCell(new Phrase("Row")); cell.Rowspan = 2; table.AddCell(cell); table.AddCell("Cell"); table.AddCell("Cell"); table.AddCell("Cell"); table.AddCell("Cell"); table.HorizontalAlignment = Element.ALIGN_CENTER; document.Add(table); //新頁面 document.NewPage(); document.Add(new Paragraph("Second page pic", cn)); Image img = Image.GetInstance("E:/VsTest/testWeb/testWeb/Files/ts20171204.002.jpeg"); float percentage = 1; //這裡都是圖片最原始的寬度與高度 float resizedWidht = img.Width; float resizedHeight = img.Height; //這時判斷圖片寬度是否大於頁面寬度減去也邊距,如果是,那麼縮小,如果還大,繼續縮小, //這樣這個縮小的百分比percentage會越來越小 while (resizedWidht > (document.PageSize.Width - document.LeftMargin - document.RightMargin) * 0.8) { percentage = percentage * 0.9f; resizedHeight = img.Height * percentage; resizedWidht = img.Width * percentage; } while (resizedHeight > (document.PageSize.Height - document.TopMargin - document.BottomMargin) * 0.8) { percentage = percentage * 0.9f; resizedHeight = img.Height * percentage; resizedWidht = img.Width * percentage; } //這裡用計算出來的百分比來縮小圖片 img.ScalePercent(percentage * 100); //圖片定位,頁面總寬283,高416;這裡設定0,0的話就是頁面的左下角 讓圖片的中心點與頁面的中心店進行重合 img.SetAbsolutePosition(document.PageSize.Width / 2 - resizedWidht / 2, document.PageSize.Height / 2 - resizedHeight / 2); writer.DirectContent.AddImage(img); document.Close(); }
最後看看效果
下面是該dll裡面的字型和顏色集合
//public const int NORMAL = 0; //public const int BOLD = 1; //public const int ITALIC = 2; //public const int UNDERLINE = 4; //public const int STRIKETHRU = 8; //public const int BOLDITALIC = 3; //public const int UNDEFINED = -1; //public const int DEFAULTSIZE = 12; //public static readonly BaseColor WHITE; //public static readonly BaseColor BLUE; //public static readonly BaseColor CYAN; //public static readonly BaseColor MAGENTA; //public static readonly BaseColor GREEN; //public static readonly BaseColor ORANGE; //public static readonly BaseColor YELLOW; //public static readonly BaseColor RED; //public static readonly BaseColor BLACK; //public static readonly BaseColor DARK_GRAY; //public static readonly BaseColor GRAY; //public static readonly BaseColor LIGHT_GRAY; //public static readonly BaseColor PINK;
這裡說說表格裡面的PdfPTable,這個東西只能初始化他的列,表格裡面add的時候是從左到右一行一行裡面的單元格新增的,所以你新增的時候可以想象成輸出乘法表那樣。這裡合併行的方法就是Colspan,列就是Rowspan,但是這裡是屬性。。。int型別數字幾就是合併幾行或者幾列這樣。。。其實一開始我以為不管是行合併列合併都是合併,應該有一個cell.row.merge(2)什麼的,雖然不人性化但是習慣就好。
圖片image物件就有意思了,它有寬和長度屬性,但是長度是隻讀的,而且設定了寬度程式執行的時候會出錯,哈哈哈。。。。這就尷尬了,所以最後用image的ScalePercent方法。。