[ASP.NET] iTextSharp產生PDF檔...Part_3(建立文字段落內容)

  • 24931
  • 0

摘要:[ASP.NET] iTextSharp產生PDF檔...Part_2(建立文字段落內容)

這次要作內容段落,排版,字型...等等

Paragraph是文章段落,可由phrases (句子)組成,然後phrase又可以由chunks(文字片段)所組成

這樣的組成方式可以很方便的在文字段落中穿插不同的字型樣式

但要注意的是chunk不會自動換行,必須自行插入換行符號”\n” 或是使用Environment.NewLine


/// 
/// 利用Web Application在Server Memory產生PDF檔後,使用者可以自行下載瀏覽或存檔,採用的是PdfWriter Class
/// 
private void GetPDF_1()
{
    Document doc = new Document(PageSize.A4, 50, 50, 80, 50); // 設定PageSize, Margin, left, right, top, bottom
    MemoryStream ms = new MemoryStream();
    PdfWriter pw = PdfWriter.GetInstance(doc, ms);

    ////    字型設定
    // 在PDF檔案內容中要顯示中文,最重要的是字型設定,如果沒有正確設定中文字型,會造成中文無法顯示的問題。
    // 首先設定基本字型:kaiu.ttf 是作業系統系統提供的標楷體字型,IDENTITY_H 是指編碼(The Unicode encoding with horizontal writing),及是否要將字型嵌入PDF 檔中。
    // 再來針對基本字型做變化,例如Font Size、粗體斜體以及顏色等。當然你也可以採用其他中文字體字型。
    BaseFont bfChinese = BaseFont.CreateFont("C:\\Windows\\Fonts\\kaiu.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    Font ChFont = new Font(bfChinese, 12);
    Font ChFont_green = new Font(bfChinese, 40, Font.NORMAL, BaseColor.GREEN);
    Font ChFont_msg = new Font(bfChinese, 12, Font.ITALIC, BaseColor.RED);

    // 開啟檔案寫入內容後,將檔案關閉。
    doc.Open();
    
	//// 第一段
	Chunk c1 = new Chunk("一項根據華盛頓州立大學研究發現,大蒜當中的化合物(二烯丙基硫化物),對於殺死細菌的作用,甚至比抗生素強了一百倍以上。科學家們正在利用這項發現,嘗試在食品生產過程中添加這天然化合物,以防止疾病的發生。", ChFont);
	Phrase p1 = new Phrase(c1);
	doc.Add(p1);
	
	//// 第二段
	Chunk c2 = new Chunk("研究人員發現,空腸彎曲菌是腸道疾病最常見的原因之一,大蒜中的化合物對它抗菌效果顯著。空腸彎曲菌是經由食物傳染的疾病,在美國大約有240萬人受到其影響,症狀包括", ChFont);
	Chunk c3 = new Chunk("腹瀉,腹部絞痛,腹痛和發燒。這種細菌也會引發一種罕見的癱瘓症被稱為格林-巴利綜合症。", ChFont_green);
	Chunk c4 = new Chunk("家醫科洛桑加參醫師表示,大蒜對於腸道的壞菌不僅有殺菌的作用,也有培養好菌的功能,還有抗凝血預防腦中風及保護心血管的效果!", ChFont_msg);
	Phrase p2 = new Phrase();
	p2.Add(c2);
	p2.Add(c3);
	p2.Add(c4);
	Paragraph pg = new Paragraph(p2);
	pg.SetAlignment("Justify"); //左右對齊
	pg.FirstLineIndent = 20f;   //段落句首縮排
	pg.SetLeading(0.0f, 2.0f);  //設定行距
	doc.Add(pg);
	
    doc.Close();

    // 在Client端顯示PDF檔,讓USER可以下載
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment;filename=Y2J.pdf");
    Response.ContentType = "application/octet-stream";
    Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
    Response.OutputStream.Flush();
    Response.OutputStream.Close();
    Response.Flush();
    Response.End();
}

 






Y2J's Life:http://kimenyeh.blogspot.tw/