【转载】 C#工具类:使用iTextSharp操作PDF文档
程序员文章站
2022-06-04 11:26:08
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工具来自动安装,如下图:
依托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技术小趣屋。原文链接:查看原文。
上一篇: 内涵图片之无敌广告概念图片