博客备份系统之一:PDF,Word,TXT文件操作类

简介:

2011年到了,在前几天的“2010岁末小记”中给自己定下了一个计划,其中有一条就是“每周至少写一篇技术博客。用博客的方式来督促自己学习和进步,记下学习的新知识和积累的知识点,构建自己的知识库。”。园子里高手很多,MVP就有好几位,看他们的文章真有“看君一博文,胜读四年书”之感。曾经对委托、事件云里雾里的我看了张子阳的“C#中的委托和事件”后终于明白了很多,园子里像这样的好文章还有很多,作为菜鸟我真的获益匪浅。

  虽然自己现在水平很差,但高手都是从菜鸟成长起来的,因此我坚信只要努力学习,每天都有收获和进步,逐渐提高自己的编程水平,总有一天也能厚积薄发,写出一些比较好的博文与大家分享,帮助新手进步。作为新年第一篇博文,我打算写一个博客备份系统系列文章与园友们分享,晒晒自己的代码,非常欢迎大家提出意见和建议。

  本文作为此系列的开篇,只写几个后面要用到的重要的类,PDF、Word、TXT文件操作类,其中Word、TXT文件操作类网上很多,这两个类的代码我只直接贴出来,重点说一下PDF文件操作类。

 

  一、PDF文件操作类

  本文PDF文件操作类用iTextSharp控件,这是一个开源项目(http://sourceforge.net/projects/itextsharp/),园子里也有这方面的文章,我的PDF操作类只是做了一点封装,使使用起来更方便。在贴出代码前先对其中几个比较关键的地方作一下说明。

  1、文档的创建

  PDF文档的创建是实例化一个Document对像,有三个构造函数:

         public  Document();
         public  Document(Rectangle pageSize);
         public  Document(Rectangle pageSize,  float  marginLeft,  float  marginRight,  float  marginTop,  float  marginBottom);

  第一个是默认大小,第二个是按给定的大小创建文档,第三个就是按给定的大小创建文档,并且文档内容离左、右、上、下的距离。其中的Rectangle也是iTextSharp中的一个表示矩形的类,这里只用来表示大小。不过要注意的是在向文档里写内容之前还要调用GetInstance方法哦,这个方法传进去一些文档相关信息(如路径,打开方式等)。 

 

 

  2、字体的设置

  PDF文件字体在iTextSharp中有两个类,BaseFont和Font,BaseFont是一个抽象类,BaseFont和Font的构造函数如下:

  BaseFont:  

        public   static  BaseFont CreateFont();
        
public   static  BaseFont CreateFont(PRIndirectReference fontRef);
        
public   static  BaseFont CreateFont( string  name,  string  encoding,  bool  embedded);
        
public   static  BaseFont CreateFont( string  name,  string  encoding,  bool  embedded,  bool  forceRead);
        
public   static  BaseFont CreateFont( string  name,  string  encoding,  bool  embedded,  bool  cached,  byte [] ttfAfm,  byte [] pfb);
        
public   static  BaseFont CreateFont( string  name,  string  encoding,  bool  embedded,  bool  cached,  byte [] ttfAfm,  byte [] pfb,  bool  noThrow);
        
public   static  BaseFont CreateFont( string  name,  string  encoding,  bool  embedded,  bool  cached,  byte [] ttfAfm,  byte [] pfb,  bool  noThrow,  bool  forceRead);

  默认的构造函数用的是英文字体,如果想用中文一般用的是第三个构造函数,这三个参数前两个意思是字体名子或字体资源路径,第三个参数我也没弄明白是什么意思。如果用字体名子其实用的是这个DLL内置字体,如果用字体资源名子可以用系统字体存放路径,如“C:\Windows\Fonts\SIMHEI.TTF”(windows系统),也可以把字体文件放在应用程序目录,然后取这个路径。

  Font: 

         public  Font();
        
public  Font(BaseFont bf);
        
public  Font(Font other);
        
public  Font(Font.FontFamily family);
        
public  Font(BaseFont bf,  float  size);
        
public  Font(Font.FontFamily family,  float  size);
        
public  Font(BaseFont bf,  float  size,  int  style);
        
public  Font(Font.FontFamily family,  float  size,  int  style);
        
public  Font(BaseFont bf,  float  size,  int  style, BaseColor color);
        
public  Font(Font.FontFamily family,  float  size,  int  style, BaseColor color);

  一般用的是第五个构造函数,也就是从BaseFont创建,然后设置字体大小。因为iTestSharp在添加文字时字体参数用的都是Font,因些一般的做法是先创建BaseFont对象,再用这个对象加上大小来实例化Font对象。

  3、添加段落

  iTextSharp对段落分了三个级别,从小到大依次为Chunk、Phrase、Paragraph。Chunk : 块,PDF文档中描述的最小原子元,Phrase : 短语,Chunk的集合,Paragraph : 段落,一个有序的Phrase集合。你可以简单地把这三者理解为字符,单词,文章的关系。

  Document对象添加内容的方法为:

         public   virtual   bool  Add(IElement element);

  Chunk、Phrase实现了IElement接口,Paragraph继承自Phrase,因些Document可直接添加这三个对象。

  Paragraph的构造函数是:

         public  Paragraph();
        
public  Paragraph(Chunk chunk);
        
public  Paragraph( float  leading);
        
public  Paragraph(Phrase phrase);
        
public  Paragraph( string  str);
        
public  Paragraph( float  leading, Chunk chunk);
        
public  Paragraph( float  leading,  string  str);
        
public  Paragraph( string  str, Font font);
        
public  Paragraph( float  leading,  string  str, Font font);

  大家可以看到Chunk、Phrase都可以实例化Paragraph,不过我用的比较多的是倒数第二个。当然了,Paragraph还有一些属性可以让我们给段落设定一些格式,比如对齐方式,段前空行数,段后空行数,行间距等。 这些属性如下:

         protected   int  alignment;
        
protected   float  indentationLeft;
        
protected   float  indentationRight;
        
protected   bool  keeptogether;
        
protected   float  multipliedLeading;
        
protected   float  spacingAfter;
        
protected   float  spacingBefore;

  略作解释:alignmant为对齐方式(1为居中,0为居左,2为居右),indentationLeft为左缩进,indentationRight为右缩进,keeptogether保持在一起(常用在对内容绝对定位),multipliedLeading为行间距,spacingAfter为段前空行数,spacingBefore为段后空行数。

  4、内部链接和外部链接

  链接在iTextSharp中有Anchor对象,它有两个属性,name和reference,name自然就是链接的名称了,reference就是链接的地址了,如果是外部链接reference直接就是一个网址,如果是内部链接,就跟html中的锚一样,用'#'加上name名,示例如下:

             // 外部链接示例
            Anchor anchor  =   new  Anchor( " 博客园 " , font);
            anchor.Reference 
=   " http://www.cnblogs.com " ;
            anchor.Name 
=   " 博客园 " ;

            
// 内部链接示例
            Anchor anc1  =   new  Anchor( " This is an internal link test " );
            anc1.Name 
=   " test " ;
            Anchor anc2 
=   new  Anchor( " Click here to jump to the internal link test " );
            anc2.Reference 
=   " #test "

  5、插入图片

  在PDF中插入图片用的是iTextSharp中的Image类。这个类的构造函数很简单:

         public  Image(Image image);
        
public  Image(Uri url);

  常用的就是用图片的Uri来实例化一个图片。因为这个数继承自Rectangle,而Rectangle又实现了IElement接口,因些可以直接将图片添加到文档中。Image有很多属性用来控制格式,不过常用的也就是对齐方式(Alignment),图片大小的控制了。不过值得一提的就是ScaleAbsolute方法:

         public   void  ScaleAbsolute( float  newWidth,  float  newHeight);

  看参数就知道是给图片重新设定宽度和高度的,我的做法是如果图片宽度大于文档宽度就按比例缩小,否则不处理:

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

  其中的rect是我定义的一个文档大小属性。

  好了,下面就贴出我的PDF文档操作类吧。为了达到封装的目地(这里说的封装意思是调用的类可以不引用iTextSharp这个DLL),我在传参过程中做了一点更改。如设置页面大小时Document的构造函数中提供了用Rectangle对象实例化,但因为这个类是iTextSharp中的,因此我改为传一个字符串(如"A4"),根据这个字符串实例化一个Rectangle对象,再来设置页面大小,其它地方类似。

PDF操作类

  好了,PDF操作类就写到这儿吧!因为本人编程是自学的,在编码规范方面可能做的不好,大家对这个类中的代码有什么改进意见请在评论中指出来哦!

  二、WORD文档操作类

  这个就不说了,直接贴代码:  

WORD操作类

  三、TXT文档操作类

  这个就是一个.NET中的文件操作类:

TXT文档操作类

 

  注:在用以上代码时请注意引用命名空间。 



本文转自Artwl博客园博客,原文链接:http://www.cnblogs.com/artwl/,如需转载请自行联系原作者

相关文章
|
2月前
|
C#
【PDF提取内容改名】批量提取PDF指定区域内容重命名PDF文件,PDF自动提取内容命名的方案和详细步骤
本工具可批量提取PDF中的合同编号、日期、发票号等关键信息,支持PDF自定义区域提取并自动重命名文件,适用于合同管理、发票处理、文档归档和数据录入场景。基于iTextSharp库实现,提供完整代码示例与百度、腾讯网盘下载链接,助力高效处理PDF文档。
346 40
|
5月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
2月前
|
缓存 测试技术 网络安全
05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡
05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡
51 0
05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡
|
2月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
4月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
147 10
|
3月前
|
数据采集 存储 API
Python爬虫结合API接口批量获取PDF文件
Python爬虫结合API接口批量获取PDF文件
|
7月前
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
846 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
DeepSeek + Xmind,1分钟自动把pdf/word文档转成思维导图
DeepSeek与Xmind结合,1分钟将PDF、Word文档转换为思维导图。只需四步:上传文档至DeepSeek,请求转换为Markdown格式,保存文件并修改后缀为.md,最后导入Xmind生成思维导图。轻松驾驭复杂文档,适用于学习笔记、工作报告、项目规划等场景,大幅提升效率!
|
7月前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
766 5
|
8月前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
667 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式

热门文章

最新文章