欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【转载】 C#工具类:使用iTextSharp操作PDF文档

程序员文章站 2022-11-25 18:07:14
iTextSharp是一个用于操作PDF文件的组件DLL程序,在C#程序中可以引用iTextSharp组件,用于开发与PDF文件相关的报表等功能,利用iTextSharp组件提供出来的方法接口,我们可以实现很多与PDF文档有关的操作,如打开PDF文档对象、往PDF文档中添加段落、添加图片链接等等,功 ......

itextsharp是一个用于操作pdf文件的组件dll程序,在c#程序中可以引用itextsharp组件,用于开发与pdf文件相关的报表等功能,利用itextsharp组件提供出来的方法接口,我们可以实现很多与pdf文档有关的操作,如打开pdf文档对象、往pdf文档中添加段落、添加图片链接等等,功能非常的强大。这边简单对itextsharp类进行了封装,提供一些常用的pdf操作方法。

itextsharp官网:  (英文好的建议直接查看原始文档)。

在visual studio开发的项目的过程中,你可以手动引入itextsharp的两个dll文件到你的项目中,引入成功后即可在项目中使用。如果你的visual studio安装有nuget  工具,可以通过nuget工具来自动安装,如下图:

【转载】 C#工具类:使用iTextSharp操作PDF文档

依托itextsharp组件封装好的pdf操作帮助类如下,只包含一些简单的操作,如果读者有更复杂的需求,请查阅官方文档后熟悉后自行封装编写:

  /// <summary>
    /// pdf文档操作类
    /// </summary>
    //------------------------------------调用--------------------------------------------
    //pdfoperation pdf = new pdfoperation();
    //pdf.open(new filestream(path, filemode.create));
    //pdf.setbasefont(@"c:\windows\fonts\simhei.ttf");
    //pdf.addparagraph("测试文档(生成时间:" + datetime.now + ")", 15, 1, 20, 0, 0);
    //pdf.close();
    //-------------------------------------------------------------------------------------
    public class pdfoperation
    {
        #region 构造函数
        /// <summary>
        /// 构造函数
        /// </summary>
        public pdfoperation()
        {
            rect = pagesize.a4;
            document = new document(rect);
        }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="type">页面大小(如"a4")</param>
        public pdfoperation(string type)
        {
            setpagesize(type);
            document = new document(rect);
        }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="type">页面大小(如"a4")</param>
        /// <param name="marginleft">内容距左边框距离</param>
        /// <param name="marginright">内容距右边框距离</param>
        /// <param name="margintop">内容距上边框距离</param>
        /// <param name="marginbottom">内容距下边框距离</param>
        public pdfoperation(string type, float marginleft, float marginright, float margintop, float marginbottom)
        {
            setpagesize(type);
            document = new document(rect, marginleft, marginright, margintop, marginbottom);
        }
        #endregion
        #region 私有字段
        private font font;
        private rectangle rect;   //文档大小
        private document document;//文档对象
        private basefont basefont;//字体
        #endregion
        #region 设置字体
        /// <summary>
        /// 设置字体
        /// </summary>
        public void setbasefont(string path)
        {
            basefont = basefont.createfont(path, basefont.identity_h, basefont.not_embedded);
        }
        /// <summary>
        /// 设置字体
        /// </summary>
        /// <param name="size">字体大小</param>
        public void setfont(float size)
        {
            font = new font(basefont, size);
        }
        #endregion
        #region 设置页面大小
        /// <summary>
        /// 设置页面大小
        /// </summary>
        /// <param name="type">页面大小(如"a4")</param>
        public void setpagesize(string type)
        {
            switch (type.trim())
            {
                case "a4":
                    rect = pagesize.a4;
                    break;
                case "a8":
                    rect = pagesize.a8;
                    break;
            }
        }
        #endregion
        #region 实例化文档
        /// <summary>
        /// 实例化文档
        /// </summary>
        /// <param name="os">文档相关信息(如路径,打开方式等)</param>
        public void getinstance(stream os)
        {
            pdfwriter.getinstance(document, os);
        }
        #endregion
        #region 打开文档对象
        /// <summary>
        /// 打开文档对象
        /// </summary>
        /// <param name="os">文档相关信息(如路径,打开方式等)</param>
        public void open(stream os)
        {
            getinstance(os);
            document.open();
        }
        #endregion
        #region 关闭打开的文档
        /// <summary>
        /// 关闭打开的文档
        /// </summary>
        public void close()
        {
            document.close();
        }
        #endregion
        #region 添加段落
        /// <summary>
        /// 添加段落
        /// </summary>
        /// <param name="content">内容</param>
        /// <param name="fontsize">字体大小</param>
        public void addparagraph(string content, float fontsize)
        {
            setfont(fontsize);
            paragraph pra = new paragraph(content, font);
            document.add(pra);
        }
        /// <summary>
        /// 添加段落
        /// </summary>
        /// <param name="content">内容</param>
        /// <param name="fontsize">字体大小</param>
        /// <param name="alignment">对齐方式(1为居中,0为居左,2为居右)</param>
        /// <param name="spacingafter">段后空行数(0为默认值)</param>
        /// <param name="spacingbefore">段前空行数(0为默认值)</param>
        /// <param name="multipliedleading">行间距(0为默认值)</param>
        public void addparagraph(string content, float fontsize, int alignment, float spacingafter, float spacingbefore, float multipliedleading)
        {
            setfont(fontsize);
            paragraph pra = new paragraph(content, font);
            pra.alignment = alignment;
            if (spacingafter != 0)
            {
                pra.spacingafter = spacingafter;
            }
            if (spacingbefore != 0)
            {
                pra.spacingbefore = spacingbefore;
            }
            if (multipliedleading != 0)
            {
                pra.multipliedleading = multipliedleading;
            }
            document.add(pra);
        }
        #endregion
        #region 添加图片
        /// <summary>
        /// 添加图片
        /// </summary>
        /// <param name="path">图片路径</param>
        /// <param name="alignment">对齐方式(1为居中,0为居左,2为居右)</param>
        /// <param name="newwidth">图片宽(0为默认值,如果宽度大于页宽将按比率缩放)</param>
        /// <param name="newheight">图片高</param>
        public void addimage(string path, int alignment, float newwidth, float newheight)
        {
            image img = image.getinstance(path);
            img.alignment = alignment;
            if (newwidth != 0)
            {
                img.scaleabsolute(newwidth, newheight);
            }
            else
            {
                if (img.width > pagesize.a4.width)
                {
                    img.scaleabsolute(rect.width, img.width * img.height / rect.height);
                }
            }
            document.add(img);
        }
        #endregion
        #region 添加链接、点
        /// <summary>
        /// 添加链接
        /// </summary>
        /// <param name="content">链接文字</param>
        /// <param name="fontsize">字体大小</param>
        /// <param name="reference">链接地址</param>
        public void addanchorreference(string content, float fontsize, string reference)
        {
            setfont(fontsize);
            anchor auc = new anchor(content, font);
            auc.reference = reference;
            document.add(auc);
        }
        /// <summary>
        /// 添加链接点
        /// </summary>
        /// <param name="content">链接文字</param>
        /// <param name="fontsize">字体大小</param>
        /// <param name="name">链接点名</param>
        public void addanchorname(string content, float fontsize, string name)
        {
            setfont(fontsize);
            anchor auc = new anchor(content, font);
            auc.name = name;
            document.add(auc);
        }
        #endregion
    }

 

扩展阅读:c#工具类:使用sharpziplib进行压缩、解压文件

备注:此文章转载自博主个人技术站点:it技术小趣屋。原文链接:查看原文