利用iTextSharp画PDF
友情提示:以下画PDF的代码是先创建PDF文件,然后往PDF里填充数据,如果不符合业务需求的,可以滑过
1、首先,添加iTextSharp包

2、添加PDF基类,供添加页脚、页眉、水印等
/// <summary>
/// Pdf处理基类
/// </summary>
public class PDFBase : PdfPageEventHelper
{
#region 属性
private String _fontFilePathForHeaderFooter = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "SIMHEI.TTF");
/// <summary>
/// 页眉/页脚所用的字体
/// </summary>
public String FontFilePathForHeaderFooter
{
get
{
return _fontFilePathForHeaderFooter;
}
set
{
_fontFilePathForHeaderFooter = value;
}
}
private String _fontFilePathForBody = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "SIMSUN.TTC,1");
/// <summary>
/// 正文内容所用的字体
/// </summary>
public String FontFilePathForBody
{
get {
return _fontFilePathForBody; }
set {
_fontFilePathForBody = value; }
}
private PdfPTable _header;
/// <summary>
/// 页眉
/// </summary>
public PdfPTable Header
{
get {
return _header; }
private set {
_header = value; }
}
private PdfPTable _footer;
/// <summary>
/// 页脚
/// </summary>
public PdfPTable Footer
{
get {
return _footer; }
private set {
_footer = value; }
}
private BaseFont _baseFontForHeaderFooter;
/// <summary>
/// 页眉页脚所用的字体
/// </summary>
public BaseFont BaseFontForHeaderFooter
{
get {
return _baseFontForHeaderFooter; }
set {
_baseFontForHeaderFooter = value; }
}
private BaseFont _baseFontForBody;
/// <summary>
/// 正文所用的字体
/// </summary>
public BaseFont BaseFontForBody
{
get {
return _baseFontForBody; }
set {
_baseFontForBody = value; }
}
private Document _document;
/// <summary>
/// PDF的Document
/// </summary>
public Document Document
{
get {
return _document; }
private set {
_document = value; }
}
#endregion
public override void OnOpenDocument(PdfWriter writer, Document document)
{
try
{
BaseFontForHeaderFooter = BaseFont.CreateFont(FontFilePathForHeaderFooter, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
BaseFontForBody = BaseFont.CreateFont(FontFilePathForBody, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Document = document;
}
catch (DocumentException de)
{
}
catch (System.IO.IOException ioe)
{
}
}
#region GenerateHeader
/// <summary>
/// 生成页眉
/// </summary>
/// <param name="writer"></param>
/// <returns></returns>
public virtual PdfPTable GenerateHeader(iTextSharp.text.pdf.PdfWriter writer)
{
return null;
}
#endregion
#region GenerateFooter
/// <summary>
/// 生成页脚
/// </summary>
/// <param name="writer"></param>
/// <returns></returns>
public virtual PdfPTable GenerateFooter(iTextSharp.text.pdf.PdfWriter writer)
{
BaseFont baseFont = BaseFontForHeaderFooter;
iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, 10, iTextSharp.text.Font.NORMAL);
PdfPTable footer = new PdfPTable(3);
AddFooterCell(footer, "甲方项目经理:", font);
AddFooterCell(footer, "乙方代表::", font);
AddFooterCell(footer, "日期:", font);
return footer;
}
private void AddFooterCell(PdfPTable foot, String text, iTextSharp.text.Font font)
{
PdfPCell cell = new PdfPCell();
cell.BorderWidthTop = 2;
cell.BorderWidthRight = 0;
cell.BorderWidthBottom = 0;
cell.BorderWidthLeft = 0;
cell.Phrase = new Phrase(text, font);
cell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
foot.AddCell(cell);
}
#endregion
public override void OnEndPage(iTextSharp.text.pdf.PdfWriter writer, iTextSharp.text.Document document)
{
base.OnEndPage(writer, document);
////输出页眉
//Header = GenerateHeader(writer);
//Header.TotalWidth = document.PageSize.Width - 20f;
/////调用PdfTable的WriteSelectedRows方法。该方法以第一个参数作为开始行写入。
/////第二个参数-1表示没有结束行,并且包含所写的所有行。
/////第三个参数和第四个参数是开始写入的坐标x和y.
//Header.WriteSelectedRows(0, -1, 10, document.PageSize.Height - 20, writer.DirectContent);
//输出页脚
Footer = GenerateFooter(writer);
Footer.TotalWidth = document.PageSize.Width - 20f;
Footer.WriteSelectedRows(0, -1, 10, document.PageSize.GetBottom(60), writer.DirectContent);
}
}
3、根据后台查出的数据画出PDF
///友情提示:在代码画PDF之前,最好自己先手动做一个范本(Excel),然后根据对应的行和列,代码画出
[AllowAnonymous]
public string BuildPdf(int srqrID)
{
//获取数据
var srqr

4119

被折叠的 条评论
为什么被折叠?



