TextSharp 是用来生成 PDF 的一个组件,在 1998 年夏天的时候,Bruno Lowagie ,iText 的创作者,参与了学校的一个项目,当时使用 HTML 来生成报告,但是,使用 HTML 打印的效果很不理想。最后,他发现,使用 PDF 可以完美解决打印问题,为了能够在各个系统中使用,iText 组件库诞生了。
最初的 iText 主要是支持 Java 語言。之後針對Microsoft .NET C Sharp做了一個版本,也就是我們今天要介紹的 iTextSharp。
目前,iTextSharp 的版本是 5.1.2,下载地址:http://sourceforge.net/projects/itextsharp/files/
其中主要包含了核心组件:itextsharp.dll
但是,直接使用它并不能处理中文,你还要下载两个组件。
在下载页面中,注意图中标注的 extras 文件夹。
点击之后,可以看到如下的下载:
注意把标注的两个压缩包下载下来,这是使用中文的关键。解开两个压缩之后可以看到下面的两个文件。
iTextAsianCmaps.dll
iTextAsian.dll
在创建的项目中,将这三个程序集都添加到项目的引用中。
// 必须先加入资源
BaseFont.AddToResourceSearch(
"iTextAsian.dll"
);
BaseFont.AddToResourceSearch(
"iTextAsianCmaps.dll"
);
//"UniGB-UCS2-H" "UniGB-UCS2-V"是简体中文,分别表示横向字 和 纵向字
//"STSong-Light"是字体名称
BaseFont bf = BaseFont.CreateFont(
"STSong-Light"
,
"UniGB-UCS2-H"
, BaseFont.EMBEDDED);
// 也可以使用 TTF 字体
BaseFont bf0 = BaseFont.CreateFont(
"C:/WINDOWS/Fonts/SIMYOU.TTF"
, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
// 创建 PDF 文档
iTextSharp.text.Document document
=
new
iTextSharp.text.Document();
// 创建写入器实例,PDF 文件将会保存到这里
iTextSharp.text.pdf.PdfWriter.GetInstance(document,
new
System.IO.FileStream(
"Demo.pdf"
, System.IO.FileMode.Create)
);
// 打开文档
document.Open();
iTextSharp.text.Font font =
new
iTextSharp.text.Font(bf);
//写入一个段落, Paragraph
document.Add(
new
Paragraph(
"你好, PDF !"
, font));
document.Close();
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
System.IO;
using
iTextSharp;
using
iTextSharp.text;
using
iTextSharp.text.pdf;
public
partial
class
_Default : System.Web.UI.Page
{
static
DataTable datatable =
new
DataTable(
"testpdf"
);
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!Page.IsPostBack)
{
DataRow dr;
//建立Column例,可以指明例的类型,这里用的是默认的string
datatable.Columns.Add(
new
DataColumn(
"编号"
));
datatable.Columns.Add(
new
DataColumn(
"用户名"
));
for
(
int
i = 1; i < 5; i++)
{
dr = datatable.NewRow();
dr[0] = System.Convert.ToString(i);
dr[1] =
"测试"
+ System.Convert.ToString(i);
datatable.Rows.Add(dr);
}
}
}
protected
void
Button1_Click(
object
sender, EventArgs e)
{
try
{
Document document =
new
Document();
PdfWriter.GetInstance(document,
new
FileStream(Server.MapPath(
"Test.pdf"
), FileMode.Create));
document.Open();
BaseFont bfChinese = BaseFont.CreateFont(
"C:\WINDOWS\Fonts\simsun.ttc,1"
, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font fontChinese =
new
Font(bfChinese, 12, Font.NORMAL,
new
Color(0, 0, 0));
//按设置的字体输出文本
document.Add(
new
Paragraph(
this
.TextBox1.Text.ToString(), fontChinese));
//输出图片到PDF文件
iTextSharp.text.Image jpeg01 = iTextSharp.text.Image.GetInstance(Server.MapPath(
"Images/gyl.jpg"
));
document.Add(jpeg01);
iTextSharp.text.Image jpeg02 = iTextSharp.text.Image.GetInstance(Server.MapPath(
"Images/yy.jpg"
));
document.Add(jpeg02);
PdfPTable table =
new
PdfPTable(datatable.Columns.Count);
for
(
int
i = 0; i < datatable.Rows.Count; i++)
{
for
(
int
j = 0; j < datatable.Columns.Count; j++)
{
table.AddCell(
new
Phrase(datatable.Rows[i][j].ToString(), fontChinese));
}
}
document.Add(table);
document.Close();
Response.Write(
"<script>alert('导出成功!');</script>"
);
}
catch
(DocumentException de)
{
Response.Write(de.ToString());
}
}
}