asp.net 2.0 中生成PDF

来源:互联网 发布:seo服务器 编辑:程序博客网 时间:2024/05/16 19:04

近期要用asp.net 2.0生成PDF,看了下书,查了下资料,发现可以有组件帮得上忙,可以下载itextsharp(https://sourceforge.net/projects/itextsharp)
下载,然后在工程中引用该控件,举例子如下

1  datatable 的内容转换为PDF
      首先,建立一个datatable转换为pdf的方法如下
 using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

/// <summary>
/// 将DataTable转化为PDF文件的方法
/// </summary>
public class TableToPDF
{
 public TableToPDF()
 {
 }
    /// <summary>
    /// 转换数据表为PDF文档
    /// </summary>
    /// <param name="Data">数据表数据</param>
    /// <param name="PDFFile">目标PDF文件全路径</param>
    /// <param name="FontPath">字体所在路径</param>
    /// <param name="FontSize">字体大小</param>
    /// <returns>返回调用是否成功</returns>
    public static bool ConvertDataTableToPDF(DataTable datatable, string PDFFilePath, string FontPath, float FontSize)
    {
        //初始化一个目标文档类
        Document document = new Document();
        //调用PDF的写入方法流
        //注意FileMode-Create表示如果目标文件不存在,则创建,如果已存在,则覆盖。
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(PDFFilePath, FileMode.Create));
        //打开目标文档对象
        document.Open();
        //创建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);
        //遍历原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;
    }
}


然后,在要调用转换的按钮的事件代码中调用就可以了
  /将目标文件保存在此项目下
        //字体使用simsun
        //字号选择14
     //mytb是数据datatable的名
        TableToPDF.ConvertDataTableToPDF(mytb, Server.MapPath(".") + @"/Table.pdf", "c://winnt//FONTS//simsun.ttc,1", 14); 

2  给出文本内容,生成PDF
    比如用户输入文本内容及要输出PDF的保存路径的话,也可以输出PDF
 ///<param="txt">:要输出文本的内容</param>


private void CreateTxt(string txt,string filepath)
    {
        //创建文档对象
        Document document = new Document();
        //实例化生成的文档
  PdfWriter.GetInstance(document, new FileStream(filepath, FileMode.Create));
     //打开文档
        document.Open();
        //在文档中添加文本内容
  document.Add(new Paragraph(txt));
        //关闭文档对象
        document.Close();
    }

 3    加页眉页脚
    private void CreatePDFheader(string filepath,string headertxt,string footertxt)
    {
        //创建文档对象
        Document document = new Document();
        // 创建文档写入实例
        PdfWriter.GetInstance(document, new FileStream(filepath, FileMode.Create));

        // 添加页脚
        HeaderFooter footer = new HeaderFooter(new Phrase(footertxt), true);
        footer.Border = Rectangle.NO_BORDER;
        document.Footer = footer;

        //打开文档内容对象
        document.Open();

        // 添加页眉
        HeaderFooter header = new HeaderFooter(new Phrase(headertxt), false);
        document.Header = header;
        //设计各页的内容
        document.Add(new Paragraph("This is First Page"));
        //新添加一个页
        document.NewPage();
        //第2页中添加文本
        document.Add(new Paragraph("This is Second Page"));
        // 重置页面数量
        document.ResetPageCount();
        //关闭文档对象
        document.Close();
    }

官网:
http://sourceforge.net/projects/itextsharp/
http://hardrock.cnblogs.com/
http://www.rubypdf.com/

现在的版本是3.18版,记得在引用里导入itextsharp.下面的代码是把图象合并到一个多页pdf的例子.

      private void process(string[] files, string newpdf)
        {
             iTextSharp.text.Document document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 25, 25, 25, 25);

            try
            {
                iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(newpdf, FileMode.Create, FileAccess.ReadWrite));

                document.Open();
                iTextSharp.text.Image image;
                for (int i = 0; i < files.Length; i++)
                {
                    image = iTextSharp.text.Image.GetInstance(files[i]);
                
                    if (image.Height > iTextSharp.text.PageSize.A4.Height - 25)
                    {
                        image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
                    }
                    else if (image.Width > iTextSharp.text.PageSize.A4.Width - 25)
                    {
                        image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
                    }
                    image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
                    //image.SetDpi(72, 72);

                    document.NewPage();
                    document.Add(image);
                
                    //Phrase phrase3 = new Phrase("dreign@163.com/n", FontFactory.GetFont(FontFactory.TIMES, 9, iTextSharp.text.Font.NORMAL, new iTextSharp.text.Color(192, 192, 192)));
                    //document.Add(phrase3);
                }
            }
            catch (Exception ioe)
            {
                MessageBox.Show(ioe.Message);
            }
            document.Close();
        }

原创粉丝点击