Hello World
public byte[] GetHelloWorldPdf() { using (MemoryStream stream = new MemoryStream()) { Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f); PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream); pdfDoc.Open(); pdfDoc.Add(new Paragraph(14f, "HelloWorld")); pdfDoc.Close(); return stream.ToArray(); } }
在 Asp.Net Mvc 回傳檔案 :
[HttpPost] public FileResult HelloWorldPdf() { IiTextSharpService service = new ITextSharpService(); byte[] content = service.GetHelloWorldPdf(); return File(content, "application/pdf", $"HelloWorld.pdf"); }
設定字型與中文問題
iTextSharp 預設字型無法處理中文,所以輸入 Hello ! 你好 ! 會變成 Hello ! !
使用 BaseFont 跟 Font 設定字體
string chFontPath = "c:\\windows\\fonts\\kaiu.ttf"; //標楷體 BaseFont baseFont = BaseFont.CreateFont(chFontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); Font chtFont = new Font(baseFont,12); using (MemoryStream stream = new MemoryStream()) { Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f); PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream); pdfDoc.Open(); pdfDoc.Add(new Paragraph(14f, "HelloWorld ! 你好!", chtFont)); pdfDoc.Close(); return stream.ToArray(); }
執行結果 :
換頁
pdfDoc.NewPage();
句子片段
chunk、phrase、paragraph
- paragraph 文章段落
- phrase 句子
- chunk 片段
pdfDoc.Add(new Paragraph(14f, "HelloWorld"));
將 Html 轉成 PDF
使用 XMLWorkerHelper
public byte[] GetHelloWorldPdf() { using (MemoryStream stream = new MemoryStream()) { Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f); PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream); pdfDoc.Open(); XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, GetHtmlContent(), GetStyleCss(), Encoding.UTF8, new UnicodeFontFactory()); pdfDoc.Close(); return stream.ToArray(); } }
GetHtmlContent
public MemoryStream GetHtmlContent() { string content = @" <html> <head></head> <body> <p>Hello World ! 你好!</p> </body> </html> "; byte[] byteArray = Encoding.UTF8.GetBytes(content); MemoryStream sr = new MemoryStream(byteArray); return sr;
GetStyleCss
private MemoryStream GetStyleCss() { string content = @" p{ color : red; } "; byte[] byteArray = Encoding.UTF8.GetBytes(content); MemoryStream sr = new MemoryStream(byteArray); return sr; }
UnicodeFontFactory 部分(從網路上直接拷貝來用的)
public class UnicodeFontFactory : FontFactoryImp { private static readonly string KaiuPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "KAIU.TTF");//標楷體 public override Font GetFont(string fontname, string encoding, bool embedded, float size, int style, BaseColor color, bool cached) { BaseFont baseFont = BaseFont.CreateFont(KaiuPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); return new Font(baseFont, size, style, color); } }
執行結果 :
參考 :
http://www.cc.ntu.edu.tw/chinese/epaper/0015/20101220_1509.htm
https://ithelp.ithome.com.tw/articles/10190232