PDF For .NET开发记录

【前言】 由于公司项目需求,今天接触了c#开发pdf的知识,参考来源于博客:http://www.cnblogs.com/zhuor/archive/2005/12/31/308908.html
使用的类库为:itextsharp.dll

【iTextSharp简介】iTextSharp由国外开发人员出品,官方网站:http://sourceforge.net/projects/itextsharp/?source=typ_redirect
你也可以直接在这里下载相关类库或src文件
压缩文件包含:
这里写图片描述

【个人开发Demo】下面均为B/S架构下的演示:直接上运行截图+核心代码

Demo v0.0.01 目的:生成一个写有”Hello World!” 的pdf文件
效果图:
这里写图片描述
实际生成不包含红色边框哦

记得引用:itextsharp.dll
核心实现方法:

    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.IO;
    /// <summary>
    /// 创建一个Document
    /// </summary>
    public void CreateDocument()
    {
        //创建一个document操作实例
        Document document = new Document();
        //为该Document类创建一个Writer实例
        PdfWriter.GetInstance(document, new FileStream(Server.MapPath("~")+"Chap0101.pdf", FileMode.OpenOrCreate));
        //打开document
        document.Open();
        //向document写入内容
        document.Add(new Paragraph("Hello World!"));
        //关闭Document
        document.Close();

    }

Demo v0.0.02 目的: 封装好了PDFHelper类,使用PDF更加方便|可直接创建,写入,自动下载到本地等|可加入显示中文,加入字体库的使用等
源码:请联系我,这里没法直接上传

效果截图:
这里写图片描述

项目目录:
这里写图片描述
PDFHelper.cs


using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;

/// <summary>
/// PDFHelper
/// 描述:快速操作 PDF文档的帮助类
/// 作者:刘壮 
/// 时间:2016-01-13 11:41
/// </summary>
public class PDFHelper
{
    //创建一个document
    Document document = null;

    #region 关于文档属性的基础设置
    /// <summary>
    /// 文档显示的方向
    /// 竖向或横向
    /// </summary>
    public enum direction { Virtical, Horizontal };
    #endregion

    #region 构造函数
    /// <summary>
    /// 创建一个无任何修饰的文档
    /// </summary>
    /// <param name="_filename">包含后缀的文件名</param>
    public PDFHelper(string _filename)
    {
        document = new Document();
        InitPathToOpen(_filename);
    }
    /// <summary>
    /// 实例化一个A4大小的文档
    /// </summary>
    /// <param name="_filename">包含后缀的文件名</param>
    /// <param name="_rectangle">内容区域</param>
    public PDFHelper(string _filename, Rectangle _rectangle)
    {
        //指定内容区域
        document = new Document(_rectangle);
        //写入权限控制
        InitPathToOpen(_filename);
        //写入数据
    }
    #endregion

    #region 公共方法

    #region document的基础参数配置方法
    /// <summary>
    /// 初始化路径并打开document的写入权限
    /// </summary>
    /// <param name="_filename">包含后缀的文件名</param>
    private void InitPathToOpen(string _filename)
    {
        //为该Document类创建一个Writer实例
        PdfWriter.GetInstance(document, new FileStream(HttpContext.Current.Server.MapPath("~/PDFS/")+ _filename, FileMode.OpenOrCreate));
        //打开document
        document.Open();
    }
    /// <summary>
    /// 关闭document
    /// </summary>
    public void Close()
    {
        document.Close();
    }

    /// <summary>
    /// 得到一个设置好的字体颜色格式
    /// </summary>
    /// <param name="_size">字号大小</param>
    /// <param name="_alpha">透明度</param>
    /// <param name="_red">红色</param>
    /// <param name="_green">绿色</param>
    /// <param name="_blue">蓝色</param>
    /// <param name="_sytle">样式:下划线,加粗,标准?Font.UNDERLINE</param>
    /// <returns></returns>

    public static Font GetFont(float _size, int _alpha, int _red, int _green, int _blue,int _sytle)
    {
        //设置字体
        BaseFont _bfont = BaseFont.CreateFont(HttpContext.Current.Server.MapPath("~/Fonts") + "\\simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        //设置字体颜色
        System.Drawing.Color _color = System.Drawing.Color.FromArgb(_alpha, _red, _green, _blue);
        BaseColor _bColor = new BaseColor(_color.ToArgb());
        Font _font = new Font(_bfont, _size, _sytle, _bColor);
        return _font;
    }

    /// <summary>
    /// 设置并获取一个标准的Rectangle类
    /// 若想设置背景色,边框等样式,请直接新建Rectangle实例详细设置
    /// </summary>
    /// <param name="_rectangle">区域,可以直接用 PageSize类选择A4等标准大小默认宽高度</param>
    /// <param name="_direction">文档方向,横向还是竖向</param>
    /// <returns></returns>
    public static Rectangle GetRectangle(Rectangle _rectangle, direction _direction)
    {
        return (_direction == PDFHelper.direction.Horizontal) ? _rectangle.Rotate() : _rectangle;
    }
    #endregion

    #region 添加内容的方法

    /// <summary>
    /// 添加节点
    /// </summary>
    /// <param name="_IElement"></param>
    public void Add(IElement _IElement)
    {
        try
        {
            document.Add(_IElement);
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    #endregion

    #region 下载文件
    /// <summary>
    /// 下载PDF文件
    /// </summary>
    /// <param name="filename">含有后缀的文件名</param>
    public void DownloadPDF(string _filename)
    {
        //服务端存储路径
        string filepath = HttpContext.Current.Server.MapPath("~/PDFS/")+_filename;
        //以字符流的形式下载文件
        byte[] bytes;
        using (FileStream fs = new FileStream(filepath,FileMode.Open))
        {
             bytes = new byte[(int)fs.Length];
            fs.Read(bytes, 0, bytes.Length);
        }

        HttpContext.Current.Response.Charset = "utf-8";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
        HttpContext.Current.Response.ContentType = "application/octet-stream";
        //通知浏览器下载|不打开
        HttpContext.Current.Response.AddHeader("Content-Disposition","attachment; filename="+HttpUtility.UrlEncode(_filename,System.Text.Encoding.UTF8));
        HttpContext.Current.Response.BinaryWrite(bytes);
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.End();
    }

    /// <summary>
    /// 创建文件夹
    /// </summary>
    /// <returns></returns>
    private string CreateDirectory(string _dirName) //要查找的文件夹名
    {
        string path = "";
        string physicsPath = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath); //将当前虚拟根路径转为实际物理路径
        string toFindDirectoryName = _dirName; //要查找的文件夹名
        FindDirectory(physicsPath + "\\", toFindDirectoryName, out path);//用递归的方式去查找文件夹
        if (!string.IsNullOrEmpty(path)) //如果存在,返回该文件夹所在的物理路径
        {
            //将该物理路径转为虚拟路径
            GetVirtualPath(path, HttpContext.Current.Request.ApplicationPath);
        }
        else
        {
            //没有找到路径,创建新文件夹
            path = physicsPath + "\\" + toFindDirectoryName;
            Directory.CreateDirectory(path);
        }
        return path;
    }
    /// <summary>
    /// 在指定目录下递归查找子文件夹
    /// </summary>
    /// <param name="bootPath">根文件夹路径</param>
    /// <param name="directoryName">要查找的文件夹名</param>
    private void FindDirectory(string bootPath, string directoryName, out string filePath)
    {
        //在指定目录下递归查找子文件夹
        DirectoryInfo dir = new DirectoryInfo(bootPath);
        filePath = "";
        try
        {
            foreach (DirectoryInfo d in dir.GetDirectories()) //查找子文件夹
            {
                if (d.Name == directoryName) //找到,返回文件夹路径
                {
                    filePath = d.FullName;
                    break;
                }
                FindDirectory(bootPath + d.Name + "\\", directoryName, out filePath); //否则继续查找
            }
        }
        catch (Exception e)
        {
            HttpContext.Current.Response.Write(e.Message);
        }
    }

    /// <summary>
    /// 将物理路径转为虚拟路径
    /// </summary>
    /// <param name="physicsPath">物理路径</param>
    /// <param name="virtualRootPath">虚拟根路径</param>
    /// <returns></returns>
    private string GetVirtualPath(string physicsPath, string virtualRootPath)
    {
        int index = physicsPath.IndexOf(virtualRootPath.Substring(1));
        return "/" + physicsPath.Substring(index).Replace("\\", "/");
    }
    #endregion
    #endregion

    #region 扩展方法

    #endregion
}

生成效果图的主要方法:
Default.cs文件中:

/// <summary>
    /// 创建一个Document
    /// </summary>
    public void CreateDocument()
    {
        //使用PDFHelper类获取标准格式区域
        //PDFHelper pdfHelper = new PDFHelper("newpdf.pdf", PDFHelper.GetRectangle(PageSize.A4, PDFHelper.direction.Virtical));
        //文件名
        string filename = "newpdf.pdf";
        //自定义区域
        Rectangle r = new Rectangle(PageSize.A4);
        r.BorderWidthTop = 10;
        r.BorderColorTop = new BaseColor(System.Drawing.Color.Red);
        r.BackgroundColor = new BaseColor(System.Drawing.Color.White);
        PDFHelper pdfHelper = new PDFHelper(filename,r);
        Chunk chunk = new Chunk("PDF生成演示", PDFHelper.GetFont(18,100,100,101,80,Font.NORMAL));
        pdfHelper.Add(chunk);

        #region 添加一个段落
        Chunk chunk1 = new Chunk("刘壮真好123adffadsfa\n真的吗?当然啦", PDFHelper.GetFont(18, 100, 1, 1, 80,Font.NORMAL));
        //chunk1.SetBackground(BaseColor.BLUE);
        //设置字符间距
        chunk1.SetWordSpacing(1f);
        //chunk1.SetUnderline(BaseColor.RED, 2f, 1f, 1f, 3f, 2);
        //设置下划线的宽度以及针对原始位置的偏移量|有重载方法,可以设置下划线颜色等
        chunk1.SetUnderline(1f, -2f);
        Paragraph p1 = new Paragraph(chunk1);
        pdfHelper.Add(p1);
        #endregion

        #region 添加一个锚点|外部链接
        Anchor anchor = new Anchor("点击打开网址",PDFHelper.GetFont(18,200,0,0,255,Font.UNDERLINE));
        anchor.Reference = "http://myggou.com";
        anchor.Name = "website";
        pdfHelper.Add(anchor);
        #endregion

        #region 添加一个锚点|内部链接
        Anchor anchor1 = new Anchor("Click here to jump to the internal link", PDFHelper.GetFont(18, 200, 0, 0, 133,Font.NORMAL));
        anchor1.Reference = "#website";
        pdfHelper.Add(anchor1);
        #endregion

        pdfHelper.Close();
        pdfHelper.DownloadPDF(filename);
    }

更新待续…

Free Spire.PDF for .NET 是 Spire.PDF for .NET 的免费版本,无需购买即可用于个人或商业用途。使用该组件,程序员可以 在.NET 程序中创建、读取、写入、编辑和操作 PDF 文档。这个控件能支持的功能十分全面,例如文档安全性设置(电子签名),提取 PDF 文本、附件、图片,PDF 合并和拆分,更新 Metadata,设置 Section,绘制图形、插入图片、表格制作和加工、导入数据等等。除此以外,Spire.PDF 还可以将 TXT 文本、图片、HTML 高质量地转换为 PDF 文件格式。 主要功能如下: 1.高质量的文档转换。Free Spire.PDF for .NET 支持 PDF 到 Word、XPS、SVG、EMF、Text 和图片(EMF、JPG、PNG、BMP、TIFF)的格式转换。也支持从 XML、HTML、RTF、XPS、Text、图片等格式生成 PDF 文档。 2.文档操作及域功能。支持合并、拆分 PDF 文档,在原有的 PDF 文档页添加覆盖页。同时,Spire.PDF 提供导入、邮戳、小册子功能,以及帮助用户从数据库读取数据并填充到域的域填写功能。 3. 安全性设置。用户可以通过设置密码和数字签名来保护 PDF 文档。用户密码和所有者密码可以确定加密的 PDF 文档的可读性、可修改性、是否可打印等有选择性的限制。与此同时,数字签名作为一个更有效的方法,可以应用于维护和对PDF文档进行身份验证。 4.数据提取。支持快速高效地从 PDF 文档提取图片、文本、PDF 分页,以及附件。 5.文件属性设置。支持对 Metadata、文件属性、页面方向、页面大小进行设置。其中文件属性包括文件限制(打印、页面提取、加评论等方面的权限限制)以及文件描述属性(文件名称、作者、主题、关键字等)。使用 Spire.PDF for .NET,用户还可以根据自己阅读喜好设定默认打开页码,分页模式,缩放比例和打印缩放,等等。 6.其他功能。 支持多种语言,支持字体格式、对齐方式设置。 绘制文字,图片,图形。 支持添加图层,透明图像,Color Space,条形码到 PDF。 支持 PDF/A-1b、PDF/x1a:2001 格式。 添加梯状图形和矢量图像到指定位置。 添加并格式化表格。 插入交互元素,例如添加自定义的 Annotation、Action、JavaScript、附件、书签等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值