使用IText.Sharp创建PDF文件是比较简单,总体来说使用5步就可以生成一个简单的PDF文档。直接上代码:

   1: static void Main(string[] args)
   2:         {
   3:             Document document = new Document();
   4:             PdfWriter.GetInstance(document, new FileStream(string.Format("{0}helloworld.pdf",
   5:                 AppDomain.CurrentDomain.BaseDirectory),FileMode.OpenOrCreate));
   6:             document.Open();
   7:             document.Add(new Paragraph("Hello World!"));
   8:             document.Close();  
   9:         }

从上面可以看出:

第一步:创建文档(Document)对象;

第二步:获取一个PdfWriter实例;

第三步:打开文档对象;

第四步:在文档中加入内容;

第五步:关闭文档。

一、文档对象

文档对象是一个容器,可以向里面加入Chunk、Phrase、Paragraph和其它高级对象。

它有三个构造函数:

页面大小是A4,边距设置均为36(上下左右)

自定义页面大小,边距默认为36(上下左右)

定义它的页面大小和边距,如下面的示例:

   1: Rectangle pagesize = new Rectangle(216f, 720f);
   2: Document document = new Document(pagesize, 36f, 72f, 108f, 180f);

当创建一个矩形或设置边距时,你可能希望知道该用什么度量单位:厘米、英寸或象素,事实上,默认的度量系统以排版单位磅为基础得出其他单位的近似值,如1英寸=72磅,如果你想在A4页面的PDF中创建一个矩形,你需要计算以下数据:

21 厘米 / 2.54 = 8.2677 英寸

8.2677英寸* 72 = 595 磅

29.7 厘米 / 2.54 = 11.6929 英寸

11.6929英寸* 72 = 842 磅

默认边距为36磅即半英寸。

如果你修改了页面尺寸和边距,仅仅影响到下一页。

   1: class Program
   2:     {
   3:         static void Main(string[] args)
   4:         {
   5:             Document document = new Document();
   6:             PdfWriter.GetInstance(document, new FileStream(string.Format("{0}helloworld.pdf",
   7:                 AppDomain.CurrentDomain.BaseDirectory), FileMode.OpenOrCreate));
   8:             document.Open();
   9:             document.Add(new Paragraph("Hello World!"));
  10:             document.SetPageSize(PageSize.A5.Rotate());
  11:             document.SetMargins(72, 72, 72, 72);
  12:             document.NewPage();
  13:             document.Add((new Paragraph("Hello World 2!")));
  14:             document.Close();
  15:             
  16:         }
  17:     }

并且,默认情况下单位换算关系也是可以进行设置的,

如:默认情况下1个单位等于1点,如果执行如下代码后:

   1: PdfWriter writer
   2:               = PdfWriter.GetInstance(document, new FileStream(string.Format("{0}helloworld.pdf",
   3:                 AppDomain.CurrentDomain.BaseDirectory), FileMode.OpenOrCreate));
   4:             writer.Userunit = 75000f;

1个单位就等于75000点

注:系统已经在PageSize默认定义了一些页面设置,如:

并且,默认情况下,定义的页面大小的设置是横向排列,如要使用纵向,就要旋转了,

如下所示:

二、PdfWriter对象

PdfWriter的作用就是用来写PDF文件,你可以向里面直接添加内容。它添加的对象低级别和直接操作内容流,一般不使用它来进行内容添加。文档对象有一个作用就是把添加到其中的高级对象翻译成低级别对象,并写PdfWriter中。

DocumentException异常经常发生在第二步到第四步,在获得PdfWriter对象时,使用的文件流,也可以修改成内存流,如下所示:

   1: static void Main(string[] args)
   2:         {
   3:             MemoryStream ms = new MemoryStream();
   4:             Document document = new Document();
   5:             PdfWriter.GetInstance(document, ms);
   6:             document.Open();
   7:             document.Add(new Paragraph("Hello World!"));
   8:             document.SetPageSize(PageSize.A5.Rotate());
   9:             document.SetMargins(72, 72, 72, 72);
  10:             document.NewPage();
  11:             document.Add((new Paragraph("Hello World 2!")));
  12:             document.Close();
  13:             using (var stream = new FileStream(string.Format("{0}helloworld.pdf",
  14:                 AppDomain.CurrentDomain.BaseDirectory), FileMode.OpenOrCreate))
  15:             {
  16:                 stream.Write(ms.ToArray(), 0, (int) ms.Length);
  17:             }
  18:         }

三、打开文档

打开文档的操作,执行了很多初始化操作,有很多设置只能在打开文档前完成,如:加密类型、强度、权限、文档元数据等等。

四、添加内容

在本例中,使用向文档中添加了一个高级对象Paragraph,也可以在这里直接使用低级操作函数进行内容添加,如下示例:

   1: static void Main(string[] args)
   2:         {
   3:             MemoryStream ms = new MemoryStream();
   4:             Document document = new Document();
   5:             PdfWriter writer = PdfWriter.GetInstance(
   6:   document, new FileStream(string.Format("{0}helloworld.pdf",
   7:                 AppDomain.CurrentDomain.BaseDirectory), FileMode.OpenOrCreate));
   8:             document.Open();
   9:  
  10:             PdfContentByte canvas = writer.DirectContentUnder;
  11:             writer.CompressionLevel = 0;
  12:             canvas.SaveState();                
  13:             canvas.BeginText();                
  14:             canvas.MoveText(36, 788);          
  15:             canvas.SetFontAndSize(
  16:               BaseFont.CreateFont(), 12);      
  17:             canvas.ShowText("Hello World");    
  18:             canvas.EndText();                  
  19:             canvas.RestoreState();          
  20:             
  21:             document.Close();
  22:         }

注:使用这种方式添加的内容,不受页边距的限制,应确定写入的内容在可视范围内。

五、关闭文档

如目录这些交差引用,就需要在关闭文档前进行写入到PDF文件中,这样才能有效的保证引用正确。

同时实例化PdfWriter的流对象,不用手动关闭,在关闭文档时会自动关闭。

如果要显示不关闭流对象,就要调用如下代码设置:

小结:

通过简单的五步就实现的PDF文件的生成,更复杂文档的生成就只需要,对第四步加入更多内容就可以实现,这只是一个简单的导,在后续中还更多内容展现。

转载于:https://www.cnblogs.com/LifelongLearning/archive/2011/03/30/1999649.html

一步一步 IText.Sharp 之 Hello Word相关推荐

  1. 一步一步 ITextSharp Anchor Image Chapter Section使用

    上一篇对块,语句.段落.列表进行了演示,本篇将对更高级的对象Anchor.Image.Chapter.Section的使用方法进行演示. 一.Anchor Anchor对象可以在文档内部或向外部跳转. ...

  2. 调试JDK源码-一步一步看HashMap怎么Hash和扩容

    调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...

  3. 一步一步指引你在Windows7上配置编译使用Caffe(https://github.com/fengbingchun/Caffe_Test)

    之前写过几篇关于Caffe源码在Windows764位上配置编译及使用过程,只是没有把整个工程放到网上,最近把整个工程整理清理了下,把它放到了GitHub上.下面对这个工程的使用作几点说明: 1.   ...

  4. 一步一步实现扫雷游戏(C语言实现)(三)

    使用WIN32API连接窗口 此项目相关博文链接 一步一步实现扫雷游戏(C语言实现)(一) 一步一步实现扫雷游戏(C语言实现)(二) 一步一步实现扫雷游戏(C语言实现)(三) 一步一步实现扫雷游戏(C ...

  5. 一步一步学Silverlight 2系列(3):界面布局

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  6. 一步一步写算法(之图结构)

    原文:一步一步写算法(之图结构) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 图是数据结构里面的重要一章.通过图,我们可以判断两个点之间是 ...

  7. 融合应用11.1.8安装,一步一步的引导

    融合应用11.1.8安装,一步一步的引导 融合应用11.1.8 安装并不是简单的与电子商务套件11 i / R12安装. 所以我们需要安装划分为许多步骤. 请注意,11.1.8 11.1.7总统发布供 ...

  8. 一步一步学Silverlight 2系列(10):使用用户控件

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 【深度学习基础】一步一步讲解卷积神经网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送 本文转自:一步一步讲解卷积神经网络 卷积神经网络(Convoluti ...

  10. 通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本...

    通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本   版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 ...

最新文章

  1. “让技术做好事”,最特殊的创投在大湾区成立
  2. 中国交通节能减排行业运营效益状况及十四五建设格局分析报告2021-2027年
  3. 【学习笔记】操作系统之哲学原理
  4. 从零认识单片机(9)
  5. 无法创建接口的实例_什么是接口?
  6. 安装Debian7后遇到的问题与解决办法
  7. Android自定义权限
  8. 计算机学硕考试时间,考研全年时间表!重要的23个时间点,都帮你整理好了
  9. java 成员变量什么时候初始化_Java中成员变量的初始化过程
  10. untiy Socket通信一篇通
  11. 第一啪,第一啪电影网,第一啪电影网用的哪里的模板diyipa.cc
  12. 【Python】具有异常处理功能的计算BMI值的python程序
  13. Leetcode 781 森林里的兔子(C++)
  14. 你感受过VR视频故事线吗?适用于哪些方面?
  15. Gartner 魔力象限:数据中心备份和恢复解决方案 2020年
  16. ADS1258---FPGA驱动(一)
  17. 实时股票数据接口 ZT
  18. PyCharm 历史版本下载 专业版 社区版
  19. 哪款蓝牙耳机接电话好?接打电话的蓝牙耳机推荐
  20. goland dlv 进行remote debug实验

热门文章

  1. JVM stack与Heap的区别
  2. Linux换行符与windows换行符
  3. Spark StructType 类型详解
  4. appium相关记录
  5. AtCoder Grand Contest 025 B - RGB Coloring
  6. 实验吧_登陆一下好吗(骚注入)你真的会PHP吗?(代码审计)
  7. 回头再说-006 时间音乐
  8. 经典:从追MM谈Java的23种设计模式
  9. 11月全球搜索引擎市场:百度份额突破30% 增势持续
  10. python中string、json、bytes的转换