namespace
PDFMake {
using
System;
using
iTextSharp.text;
using
iTextSharp.text.pdf;
using
System.IO;
public
class
PDFITEXTSharp {
private
string
_pdfSavePath;
///
<summary>
///
pdf文件保存地址
///
</summary>
public
string
PDFSavePath {
get
{
if
(
string
.IsNullOrEmpty(_pdfSavePath)) {
return
AppDomain.CurrentDomain.BaseDirectory Guid.NewGuid().ToString()
"
.pdf
"
; }
return
_pdfSavePath; }
set
{ _pdfSavePath
=
value; } }
///
<summary>
///
通过函数深圳pdf保存地址
///
</summary>
///
<param name="pdfSavePath"></param>
public
void
SetPDFSavePath(
string
pdfSavePath) {
this
.PDFSavePath
=
pdfSavePath; }
#region
Demo region
///
<summary>
///
HelloWorld示例程序
///
</summary>
public
void
HelloWorld() { Document document
=
new
Document(); PdfWriter.GetInstance(document,
new
FileStream(PDFSavePath, FileMode.Create)); document.Open(); document.Add(
new
Paragraph(
"
Hello World
"
)); document.Close(); }
///
<summary>
///
PDF生成(重载)
///
</summary>
///
<param name="pdfSavePath"></param>
public
void
MakePDF(
string
pdfSavePath) {
this
.PDFSavePath
=
pdfSavePath; MakePDF(); }
///
<summary>
///
PDF生成
///
</summary>
public
void
MakePDF() { Document document
=
new
Document(PageSize.A4);
//
创建一个Document实例
PdfWriter writer
=
PdfWriter.GetInstance(document,
new
FileStream(PDFSavePath, FileMode.Create));
//
创建Writer实例
document.Open();
#region
写入一些数据,包括:作者、标题、摘要、关键词、创建者、生产者、创建时间、头信息
document.AddAuthor(
"
你的名字
"
); document.AddCreationDate(); document.AddCreator(
"
公司名称
"
); document.AddHeader(
"
QQ
"
,
"
你的QQ
"
); document.AddHeader(
"
Email
"
,
"
您的邮箱
"
); document.AddKeywords(
"
物联网
"
); document.AddProducer(); document.AddSubject(
"
VIP观众入场凭券!
"
); document.AddTitle(
"
标题
"
);
#endregion
BaseFont baseFont
=
CreateChineseFont(); iTextSharp.text.Font titleFont
=
new
iTextSharp.text.Font(baseFont,
22
, Font.BOLD); iTextSharp.text.Font fontUnderLine
=
new
iTextSharp.text.Font(baseFont,
12
, Font.UNDERLINE); iTextSharp.text.Font normalFont
=
new
Font(baseFont,
12
); iTextSharp.text.Font normalRedFont
=
new
Font(baseFont,
12
, Font.NORMAL
|
Font.BOLD, BaseColor.RED);
float
titleLineHeight
=
45f, normalLineHeight
=
25f; Paragraph pBlank
=
new
Paragraph(
"
"
, normalFont); pBlank.Leading
=
normalLineHeight; Image jpeg
=
Image.GetInstance(AppDomain.CurrentDomain.BaseDirectory
"
Data\\logo.bmp
"
); jpeg.Alignment
=
Element.ALIGN_CENTER; document.Add(jpeg); Paragraph titleP
=
new
Paragraph(
"
VIP观众入场凭券
"
, titleFont); titleP.Leading
=
titleLineHeight; titleP.Alignment
=
Element.ALIGN_CENTER; document.Add(titleP); Chunk chunk1
=
new
Chunk(
"
尊敬的
"
, normalFont), chunk2
=
new
Chunk(
"
$uName$
"
, fontUnderLine) , chunk3
=
new
Chunk(
"
:
"
, normalFont); document.Add(GetPTxt(
new
Chunk[] { chunk1, chunk2, chunk3 }, normalLineHeight)); document.Add(pBlank); document.Add(CreateTable()); document.Add(pBlank);
//
空行
document.Add(GetPTxt(
"
其实生成PDF就是这么简单!!
"
, normalFont, normalLineHeight)); document.Close(); }
#endregion
#region
文档元素生成区域
///
<summary>
///
生成段落文本
///
</summary>
///
<param name="txt">
文本
</param>
///
<param name="txtFont">
字体
</param>
///
<param name="lineHeight">
行高
</param>
///
<returns>
段落文本
</returns>
static
Paragraph GetPTxt(
string
txt, Font txtFont,
float
lineHeight) { Paragraph p
=
new
Paragraph(lineHeight, txt, txtFont);
return
p; }
///
<summary>
///
生成段落文本
///
</summary>
///
<param name="txt">
文本
</param>
///
<param name="txtFont">
字体
</param>
///
<param name="lineHeight">
行高
</param>
///
<param name="elementAlign">
对齐方式
</param>
///
<returns>
段落文本
</returns>
static
Paragraph GetPTxt(
string
txt, Font txtFont,
float
lineHeight,
int
elementAlign) { Paragraph p
=
new
Paragraph(lineHeight, txt, txtFont); p.Alignment
=
elementAlign;
return
p; }
///
<summary>
///
生成段落文本
///
</summary>
///
<param name="chnkArr">
Chunk数组
</param>
///
<param name="lineHeight">
行高
</param>
///
<returns>
段落文本
</returns>
static
Paragraph GetPTxt(Chunk[] chnkArr,
float
lineHeight) {
if
(chnkArr
==
null
||
chnkArr.Length
==
0
) {
return
new
Paragraph(
""
); } Paragraph p
=
new
Paragraph();
foreach
(Chunk chnkTxt
in
chnkArr) { p.Add(chnkTxt); } p.Leading
=
lineHeight;
return
p; }
///
<summary>
///
创建Table行
///
</summary>
///
<param name="txt">
文本
</param>
///
<param name="txtFont">
字体
</param>
///
<param name="align">
对齐方式
</param>
///
<param name="colSpan">
跨行数
</param>
///
<param name="padTop">
顶部padding
</param>
///
<param name="padBottom">
底部padding
</param>
///
<returns>
Table行
</returns>
static
PdfPCell CreateCell(
string
txt, Font txtFont,
int
align,
int
colSpan,
float
padTop,
float
padBottom) { PdfPCell cell
=
new
PdfPCell(
new
Phrase(txt, txtFont));
if
(padTop
>
0
) { cell.PaddingTop
=
padTop; }
if
(padBottom
>
0
) { cell.PaddingBottom
=
padBottom; }
if
(colSpan
>
0
) { cell.Colspan
=
colSpan; } cell.HorizontalAlignment
=
align;
return
cell; }
///
<summary>
///
创建Table行(RowSpan)
///
</summary>
///
<param name="txt">
文本
</param>
///
<param name="txtFont">
字体
</param>
///
<returns>
Table行(RowSpan)
</returns>
static
PdfPCell CreateRowSpanCell(
string
txt, Font txtFont) { PdfPCell cell
=
new
PdfPCell(
new
Phrase(60f, txt, txtFont)); cell.Rowspan
=
6
; cell.PaddingTop
=
6f; cell.PaddingBottom
=
6f; cell.PaddingLeft
=
10f; cell.VerticalAlignment
=
Element.ALIGN_MIDDLE;
return
cell; }
///
<summary>
///
创建Table行
///
</summary>
///
<param name="txt">
文本
</param>
///
<param name="txtFont">
字体
</param>
///
<param name="colSpan">
跨行数
</param>
///
<param name="padTop">
顶部padding
</param>
///
<param name="padBottom">
底部padding
</param>
///
<param name="bgColor">
背景色
</param>
///
<returns>
Table行
</returns>
static
PdfPCell CreateCellHeader(
string
txt, Font txtFont,
int
colSpan,
float
padTop,
float
padBottom, BaseColor bgColor) { PdfPCell cell
=
new
PdfPCell(
new
Phrase(txt, txtFont));
if
(padTop
>
0
) { cell.PaddingTop
=
padTop; }
if
(padBottom
>
0
) { cell.PaddingBottom
=
padBottom; }
if
(colSpan
>
0
) { cell.Colspan
=
colSpan; } cell.HorizontalAlignment
=
Element.ALIGN_CENTER;
//
0=Left, 1=Centre, 2=Right
cell.VerticalAlignment
=
Element.ALIGN_MIDDLE; cell.BackgroundColor
=
bgColor;
return
cell; }
///
<summary>
///
创建表格(PdfPTable)
///
</summary>
///
<returns></returns>
static
PdfPTable CreateTable() { PdfPTable table
=
new
PdfPTable(
6
); table.TotalWidth
=
470f; table.LockedWidth
=
true
; table.HorizontalAlignment
=
1
;
float
[] widths
=
new
float
[] { 95f, 95f, 55f, 40f, 95f, 95f }; table.SetWidths(widths); BaseFont baseFont
=
CreateChineseFont(); iTextSharp.text.Font titleFont
=
new
iTextSharp.text.Font(baseFont,
12
, Font.BOLD); iTextSharp.text.Font normalFont
=
new
Font(baseFont,
10
), normalBoldFont
=
new
Font(baseFont,
10
, Font.BOLD); iTextSharp.text.Font normalRedFont
=
new
Font(baseFont,
10
, Font.NORMAL
|
Font.BOLD, BaseColor.RED);
float
padding
=
6f; BaseColor bgColor
=
new
BaseColor(
153
,
204
,
255
); table.AddCell(CreateCellHeader(
"
2010 年深圳物联网技术和应用展览会VIP观众信息
"
, titleFont,
6
, 8f, 8f, bgColor)); table.AddCell(CreateCell(
"
姓名
"
, normalBoldFont,
1
,
0
, padding, padding)); table.AddCell(CreateCell(
"
$uName$
"
, normalFont,
0
,
5
, padding, padding)); table.AddCell(CreateCell(
"
单位
"
, normalBoldFont,
1
,
0
, padding, padding)); table.AddCell(CreateCell(
"
$cName$
"
, normalFont,
0
,
5
, padding, padding)); table.AddCell(CreateCell(
"
联系电话
"
, normalBoldFont,
1
,
0
, padding, padding)); table.AddCell(CreateCell(
"
$uTel$
"
, normalFont,
0
,
2
, padding, padding)); table.AddCell(CreateCell(
"
职务
"
, normalBoldFont,
1
,
0
, padding, padding)); table.AddCell(CreateCell(
"
$uHeadShip$
"
, normalFont,
0
,
2
, padding, padding)); table.AddCell(CreateCell(
"
VIP编号
"
, normalBoldFont,
1
,
0
, padding, padding)); table.AddCell(CreateCell(
"
SZRFID-VIP-0001
"
, normalRedFont,
0
,
5
, padding, padding)); table.AddCell(CreateRowSpanCell(
"
其它参观人员 (如贵公司新增其它参观人员请在此栏填写姓名和联系方式,否则必须在现场排队登记)
"
, normalFont)); table.AddCell(CreateCellHeader(
"
姓名
"
, normalBoldFont,
0
, padding, padding, bgColor)); table.AddCell(CreateCellHeader(
"
职务
"
, normalBoldFont,
2
, padding, padding, bgColor)); table.AddCell(CreateCellHeader(
"
联系电话
"
, normalBoldFont,
0
, padding, padding, bgColor)); table.AddCell(CreateCellHeader(
"
电子邮件
"
, normalBoldFont,
0
, padding, padding, bgColor));
for
(
int
i
=
0
; i
<
5
; i ) { table.AddCell(CreateCell(
"
"
, normalFont,
0
,
0
, padding, padding)); table.AddCell(CreateCell(
"
"
, normalFont,
0
,
2
, padding, padding)); table.AddCell(CreateCell(
"
"
, normalFont,
0
,
0
, padding, padding)); table.AddCell(CreateCell(
"
"
, normalFont,
0
,
0
, padding, padding)); }
return
table; }
#endregion
#region
公共函数区域
///
<summary>
///
创建中文字体(实现中文)
///
</summary>
///
<returns></returns>
public
static
BaseFont CreateChineseFont() { BaseFont.AddToResourceSearch(
"
iTextAsian.dll
"
); BaseFont.AddToResourceSearch(
"
iTextAsianCmaps.dll
"
);
//
"STSong-Light", "UniGB-UCS2-H",
BaseFont baseFT
=
BaseFont.CreateFont(
"
STSong-Light
"
,
"
UniGB-UCS2-H
"
, BaseFont.EMBEDDED);
//
iTextSharp.text.Font font = new iTextSharp.text.Font(baseFT);
return
baseFT; }
#endregion
} }
相关随笔