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 );
      

    }

posted on 2011-07-08 14:14  缘来  阅读(789)  评论(0)    收藏  举报

导航