Asp.net 生成PDF
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using System.Text;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//iTextsharp 给PDF文件添加水印,是通过 PdfWriter 的 PageEvent 事件来处理的,此事件,需要继承 PdfPageEventHelper,并且重写 OnEndPage 事件。
public class PdfEventHanler : PdfPageEventHelper
{
string m_WatermaskText;
BaseFont m_WatermaskTextFont;
/// <summary>
///
/// </summary>
/// <param name="watermaskText">水印文字的内容</param>
/// <param name="watermaskTextFont">水印文字的字体</param>
public PdfEventHanler(string watermaskText, BaseFont watermaskTextFont)
{
m_WatermaskText = watermaskText;
m_WatermaskTextFont = watermaskTextFont;
}
/// <summary>
/// 在Page End事件中,添加页面水印,此事件在每页均会发生
/// </summary>
/// <param name="writer"></param>
/// <param name="document"></param>
public override void OnEndPage(PdfWriter writer, Document document)
{
PdfGState gstate = new PdfGState();
gstate.FillOpacity = 0.2f; //设置灰度和透明度
gstate.StrokeOpacity = 0.2f;
//水印内容,必须放置在底层
PdfContentByte wm = writer.DirectContentUnder;
wm.SaveState();
wm.SetGState(gstate);
#region 给页面添加文字水印
wm.SetFontAndSize(m_WatermaskTextFont, 50);
wm.BeginText();
//设置水印样式
wm.ShowTextAligned(Element.ALIGN_CENTER, m_WatermaskText, document.PageSize.Width / 4, document.PageSize.Height / 4, -35f);
wm.ShowTextAligned(Element.ALIGN_CENTER , m_WatermaskText, document.PageSize.Width / 2, document.PageSize.Height / 2,-35f);
wm.ShowTextAligned(Element.ALIGN_CENTER, m_WatermaskText, document.PageSize.Width / 2, document.PageSize.Height / 2, 35f);
wm.ShowTextAligned(Element.ALIGN_CENTER , m_WatermaskText, document.PageSize.Width*3 / 4, document.PageSize.Height*3 / 4, -35f);
wm.EndText();
#endregion
wm.RestoreState();
base.OnEndPage(writer, document);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
#region
//设置字体,破解iTextSharp不支持中日韩文
//BaseFont bfHei = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//Font font = new Font(bfHei, 12);
//Document document = new Document();
//PdfWriter writer= PdfWriter.GetInstance(document, new FileStream("D:\\Chap0101.pdf", FileMode.Create));
//HeaderFooter footer = new HeaderFooter(new Phrase("This is page"),true);
//footer.Border = Rectangle.NO_BORDER;
//document.Footer = footer;
//HeaderFooter header = new HeaderFooter(new Phrase("页眉",font), false);
//document.Header = header;
//writer.PageEvent = new PdfEventHanler("tangzhixiang",bfHei);//添加水印
//document.Open();
////添加类容
//string text = "这是字体测试,Hello Word!!";
//document.Add(new Paragraph(text, font));
////添加图片
////iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(Server.MapPath("123.jpg"));
////document.Add(img);
////生成表格
//iTextSharp.text.Table table = new iTextSharp.text.Table(3);
// table.BorderWidth = 1;
// table.BorderColor = new Color(0, 0, 255);
// table.Cellpadding = 5;
// table.Cellspacing = 5;
// Cell cell = new Cell("header");
// cell.Header = true;
// cell.Colspan = 3;
// table.AddCell(cell);
// cell = new Cell("example cell with colspan 1 and rowspan 2");
// cell.Rowspan = 2;
// cell.BorderColor = new Color(255, 0, 0);
// table.AddCell(cell);
// table.AddCell(new Paragraph("测试",font));
// table.AddCell("2.1");
// table.AddCell("1.2");
// table.AddCell("2.2");
// table.AddCell("cell test1");
// cell = new Cell("big cell");
// cell.Rowspan = 2;
// cell.Colspan = 2;
// cell.BackgroundColor = new Color(0xC0, 0xC0, 0xC0);
// table.AddCell(cell);
// table.AddCell("cell test2");
// document.Add(table);
// document.Close();
#endregion
//初始化一个目标文档类
Document document = new Document();
//调用PDF的写入方法流
//注意FileMode-Create表示如果目标文件不存在,则创建,如果已存在,则覆盖。
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("D:\\Chap0102.pdf", FileMode.Create));
//打开目标文档对象
//// 添加页眉
//HeaderFooter header = new HeaderFooter(new Phrase("header"), false);
//document.Header = header;
document.Open();
//创建PDF文档中的字体
BaseFont baseFont = BaseFont.CreateFont(
@"C:\WINDOWS\Fonts\SIMHEI.TTF",
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
//根据字体路径和字体大小属性创建字体
Font font = new Font(baseFont, 12);
//根据数据表内容创建一个PDF格式的表
PdfPTable table = new PdfPTable(table1.Rows[0].Cells.Count);
// table.WidthPercentage =50F;
table.DefaultCell.HorizontalAlignment = PdfCell.ALIGN_CENTER;
table.DefaultCell.VerticalAlignment = PdfCell.ALIGN_MIDDLE;
//遍历原table的内容
for (int i = 0; i < table1.Rows.Count; i++)
{
for (int j = 0; j < table1.Rows[i].Cells.Count; j++)
{
Cell cell = new Cell();
cell.UseAscender = true;
cell.VerticalAlignment = Cell.ALIGN_MIDDLE;
cell.HorizontalAlignment = Cell.ALIGN_MIDDLE;
table.AddCell(new Paragraph(table1.Rows[i].Cells[j].InnerText.ToString(), font));
}
}
document.Add(table);
document.Add(new Paragraph("---------------------------------------------------------------------------------------", font));
PdfPTable table2 = new PdfPTable(GridView1.Rows[0].Cells.Count);
table2.DefaultCell.HorizontalAlignment = PdfCell.ALIGN_CENTER;
table2.DefaultCell.VerticalAlignment = PdfCell.ALIGN_MIDDLE;
// table.WidthPercentage =50F;
//遍历原table的内容
for (int i = 0; i < GridView1.Rows.Count; i++)
{
for (int j = 0; j < GridView1.Rows[i].Cells.Count; j++)
{
table2.AddCell(new Paragraph(GridView1.Rows[i].Cells[j].Text.ToString(), font));
}
}
//在目标文档中添加转化后的表数据
document.Add(table2);
//关闭目标文件
document.Close();
}
///
/// 转换数据表为PDF文档
///
/// 数据表数据
/// 目标PDF文件全路径
/// 字体所在路径
/// 字体大小
/// 返回调用是否成功
public static bool ConvertDataTableToPDF(System.Data.DataTable datatable, string PDFFilePath, string FontPath, float FontSize ,int row)
{
//初始化一个目标文档类
Document document = new Document();
//调用PDF的写入方法流
//注意FileMode-Create表示如果目标文件不存在,则创建,如果已存在,则覆盖。
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(PDFFilePath, FileMode.Create));
//打开目标文档对象
document.Open();
// 添加页眉
HeaderFooter header = new HeaderFooter(new Phrase("header"), false);
document.Header = header;
//创建PDF文档中的字体
BaseFont baseFont = BaseFont.CreateFont(
FontPath,
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
//根据字体路径和字体大小属性创建字体
Font font = new Font(baseFont, FontSize);
//根据数据表内容创建一个PDF格式的表
//PdfPTable table = new PdfPTable(datatable.Columns.Count);
PdfPTable table = new PdfPTable(row);
//table.WidthPercentage = 500F;
//打印列名
for (int j = 0; j < datatable.Columns.Count; j++)
{
table.AddCell(new Paragraph(datatable.Columns[j].ColumnName.ToString(), font));
}
////遍历原table的内容
//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(), font));
// }
//}
//在目标文档中添加转化后的表数据
document.Add(table);
//关闭目标文件
document.Close();
//关闭写入流
writer.Close();
return true;
}
protected void Button2_Click(object sender, EventArgs e)
{
////创建PDF文档中的字体
//BaseFont baseFont = BaseFont.CreateFont(
// @"C:\WINDOWS\Fonts\SIMHEI.TTF",
// BaseFont.IDENTITY_H,
// BaseFont.NOT_EMBEDDED);
////根据字体路径和字体大小属性创建字体
//Font font = new Font(baseFont, 12);
int row = table1.Rows[0].Cells.Count;
DataTable dt = new DataTable();
foreach (HtmlTableRow tr in table1.Rows)
{
for (int i = 0; i < tr.Cells.Count; i++)
{
dt.Columns.Add(tr.Cells[i].InnerText);
}
}
Label1.Text = dt.Columns.Count.ToString();
ConvertDataTableToPDF(dt, "D:\\Chap0103.pdf", @"C:\WINDOWS\Fonts\SIMHEI.TTF", 12,row );
}
浙公网安备 33010602011771号