天道酬勤

摘要: 前言 最近公司一直使用iText开发PDF报表,使用一段时间之后发现iText这个类库虽然是庞大无比,但作为程序猿我们不需要知道所有的类和方法,我们只需要知道如何使用即可。 所以这篇文章就是告诉大家如何快速的使用iTextSharp(iText .net版本)进行开发。 iTextSharp开发步骤 快速开发之前,我们先了解以下4个类: cla... 阅读全文
posted @ 2014-07-12 11:31 JulyLuo 阅读(49687) 评论(6) 推荐(14)
摘要: 断断续续的写了一些关于iText in Action 2nd这本书的很多读书笔记,这里汇总一下方便别人也方便自己。 Part 1 (从头构建pdf文档) Pdf和Itext的介绍 五步创建一个新的pdf文档 Using iText’s Basic building block 文档中添加chunk, 阅读全文
posted @ 2012-07-29 09:51 JulyLuo 阅读(7639) 评论(6) 推荐(8)
摘要: 前言在前面的章节中我们知道一个PdfStamper对象只能对应一个PdfReader对象。因此当我们将多个文档组装或者编辑时就需要用到另一个类:PdfCopy。PdfCopy继承PdfWriter,因此在五步创建文档过程中可以用PdfCopy代替PdfWriter,就如以下代码所示:listing 6.20 SelectPages.csint n = reader.NumberOfPages;Document document = new Document();PdfCopy copy = new PdfCopy(document, new FileStream(result2, FileMo 阅读全文
posted @ 2012-07-28 15:24 JulyLuo 阅读(3567) 评论(0) 推荐(0)
摘要: 前言在目前为止,我们使用iText创建文档都是使用前面提到的五步创建法,但在这一节我们会用PdfStamper类为现有文档添加内容。PdfStamper使用了不同的架构,具体参考以下代码:listing 6.11 SelectPages.cspublic string ContructFile(){ PdfReader reader = new PdfReader(new MovieTemplates().ContructFile()); reader.SelectPages("4-8");……… if (!File.Exists(result1)) { ... 阅读全文
posted @ 2012-07-23 23:28 JulyLuo 阅读(5364) 评论(0) 推荐(0)
摘要: 前言大家可能还记得我们在第五节中创建d的超人pdf文档,那个文档是从包含了Pdf语法的文本文件中构建起来的,图片看起来蛮cool,但那不是标准的构建方式。如果你希望可以重用现有文档内容,使用第五节中那些方法就比较危险。其实有更加安全的方法从现有文档中导入内容,这也是我们这一节要介绍的内容。Importing pages现在我们对第三节中创建的TimeTable文档进行一些操作。假设我们希望重用TimeTable文档中的内容,而且将其的每一页当作一个图片处理。下图就是如果用PdfPTable处理导出页面的效果。代码如下:listing 6.4 ImportingPages1.csdocument 阅读全文
posted @ 2012-07-22 17:12 JulyLuo 阅读(2649) 评论(1) 推荐(0)
摘要: 前言从这一节开始内容集中到操作现有的pdf文档,如何创建pdf文档已经在前五节中有了很详细的说明。这一大章的英文名为Manipulating existing PDF documents,在定下这个名字之前出版社的建议是Editing PDF。但是PDF不是一个适合编辑(edit)的文档格式,PDF是一个呈现的格式,和我们平常用到的word不一样。在word中内容是分布在不同的页上,所以如果用不同的应用程序打开内容就不太一致,比如对同一个文本片段用office打开会出现在页面X上,但如果用Open Office打开就可能会出现在页面Y上,这也是大家选择PDF文档的理由之一。在PDF文档中,不管 阅读全文
posted @ 2012-07-21 23:49 JulyLuo 阅读(4108) 评论(0) 推荐(0)
摘要: 前言 在上一节我们讨论了几种不同页边界的类型后这一节我们继续回到IPdfPageEvent接口中,现在这个接口还剩下以下4个关于文档和页面的方法没有说明: OnOpenDocument----当文档被带打开的时候调用,一般在这个方法中初始化一些需要在整个文档中使用的资源。 OnStartPage----当一个新的页面开启时调用,一般使用这个方法初始化一些页面需要的参数,最后要注意... 阅读全文
posted @ 2012-07-20 19:56 JulyLuo 阅读(3385) 评论(0) 推荐(1)
摘要: 前言目前为止,我们通过Rectangle对象来定义页面的大小,而页面大小是PDF文档中5个不同页边界(page boundaries)的值。我们会在这一节中学习这些页边界,而且会通过一些列子来说明两个最重要页边界已经他们之间的区别。作者可以以自己的样子为模板画一个超人的图片,而且图片有1平方米,但为了避嫌,还是不画的好。但著名的商业画家Dick Kline曾经就为作者画过这样一幅画,并由长期使用iText的用户Bill Segraves送给了作者。这幅画不是有原始的图片元素组成,是由一系列的贝加尔曲线构建而成,这些曲线存储在一个文本文件hero.txt中,以下为具体的代码:listing 5. 阅读全文
posted @ 2012-07-19 19:23 JulyLuo 阅读(2166) 评论(0) 推荐(1)
摘要: 前言 在我们将一些基本构建块(Chunk,Paragraph,Chapter等)添加到Document对象的实例中是,基本的构建块是由PdfWriter对象转换为pdf语法。在这个过程中,有一个我们很少直接使用但很重要的类:PdfDocument。这个类负责检测high-level对象,同时也负责调用IPdfPageEvent接口的页面事件(page event)。IPdfPageEvent接口... 阅读全文
posted @ 2012-07-13 23:17 JulyLuo 阅读(1992) 评论(0) 推荐(0)
摘要: 前言在第二节和第四节中我们使用iText内部使用的对象和方法来构建一个文档。使用Chunk类时我们可以设置其背景色和下划线,使用PdfPTable类时我们可以设置边框和背景色,但如果这些都还不够呢?如果你像为Chunk类创建一个椭圆的背景,为PdfPCell类创建圆角那要如何处理。这一节就是要介绍Chunk,Paragraph,Chapter,Section,PdfPTable和PdfPCell类的自定义功能。在前面的章节中当内容不能完全填充一页时,iText会自动创建新的一页,但我们可能希望在每一页上自动添加一些元数据:页眉,页脚或者水印。这些都可以通过page event事件完成。以上所说 阅读全文
posted @ 2012-07-12 23:29 JulyLuo 阅读(2943) 评论(0) 推荐(2)