iTextSharp快速使用指南

原文:iTextSharp快速使用指南

前言

最近公司一直使用iText开发PDF报表,使用一段时间之后发现iText这个类库虽然是庞大无比,但作为程序猿我们不需要知道所有的类和方法,我们只需要知道如何使用即可。

所以这篇文章就是告诉大家如何快速的使用iTextSharp(iText .net版本)进行开发。

iTextSharp开发步骤

快速开发之前,我们先了解以下4个类:

          class 所代表的含义
Paragraph 报表中的文本
Image 报表中的图片
PdfPTable 表格
PdfPCell 单元格

知道这4个类之后就是开发的步骤了:

1. 往单元格PdfPCell类中添加内容。

2.将单元格PdfPCell添加到PdfPTable。

3.将表格PdfPTable添加到Document。

在以上的步骤中最重要的就是第一步也就是往PdfPCell中添加内容,而PdfPCell中的内容又可以分为以下三种情况:

文本 Paragraph
图片 Image
表格 PdfPTable

接下来我们就直奔主题,看是如何往PdfPCell添加内容。因为报表需要数据,所以我就从百度分辨率统计获取了一些数据,下面是这个网址的截图:

往PdfPCell添加文本

文本由Paragraph来表示,在添加之前还要注意一下字体的问题,因为我们用的是中文字体,如果用默认英文字体渲染则会乱码,所以我们要先定义中文字体:

BaseFont BF_Light = BaseFont.CreateFont(@"C:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

字体定义完之后下面就添加文本:

//要设置字体和大小
p = new Paragraph(fields[i], new Font(BF_Light, 13));
cell = new PdfPCell(p);
//设置cell属性
//cell.Border = Rectangle.NO_BORDER;
if (rowNum == 0)
{
    cell.BackgroundColor = BaseColor.GRAY;
}
if (i == mainColumn - 1)
{
    cell.HorizontalAlignment = Element.ALIGN_RIGHT;
}
//添加单元格
table.AddCell(cell);

其实添加很简单,就是最上面两行代码,而对PdfPCell属性设置的代码一般会比较多,因为我们一般要设置其背景色,水平对其,还有边框Border等。

往PdfPCell添加图片和表格

在大家了解怎么往PdfPCell添加完文本之后,添加图片和表格就简单很多了,就是将Image和PdfPTable作为PdfPCell的构造器参数传入即可:

//图片
Image image = Image.GetInstance(imagePath);
cell = new PdfPCell(image, true);
table.AddCell(cell);

//表格
PdfPTable baseTable = GetBaseTable();
cell = new PdfPCell(baseTable);
table.AddCell(cell);

以下就是效果图:

iTextSharp画图

通过以上PdfPCell的操作,大家就可以实现一些比较常见的PDF报表,现在我们更进一步实现一下的效果:

这里就必须用到画图,画图用的就是PdfContentByte类,这个就类似于画板,我们可以直接在上面画直线和文本:

//画线
canvas.SaveState();
canvas.SetLineWidth(2f);
canvas.MoveTo(100, 100);
canvas.LineTo(200, 200);
canvas.Stroke();
canvas.RestoreState();

//文本
ColumnText.ShowTextAligned(canvas, Element.ALIGN_RIGHT, new Phrase("JulyLuo测试", new Font(BF_Light, 10)), 100, 20, 0);

这里要注意的是,无论是画线还是文本我们都需要坐标,而且在画线的时候,要将具体的代码放在SaveState和RestoreState中间,这样就不会导致画图状态的紊乱。

如果我们希望将上图画在一个单元格中,但我们知道画图需要坐标,而在PdfPCell中是坐标没有暴露出来,所以这里我们需要iTextSharp中的接口:IPdfPCellEvent

public void CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases)

这个接口的意思就是在单元格添加到文档之后暴露的方法。很明显,通过postion参数我们可以获取坐标,canvases参数可以获取画板。

所以要画图就创建一个实现接口IPdfPCellEvent的类,然后在CellLayout方法中画线和文本:

public void CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases)
{
    PdfContentByte cb = canvases[PdfPTable.BACKGROUNDCANVAS];
    PdfContentByte cbline = canvases[PdfPTable.LINECANVAS];

    cbline.SaveState();
    cb.SaveState();

    …………

    cb.SetLineWidth(0.4f);
    cbline.SetLineWidth(0.4f);
    //y 轴
    cb.MoveTo(leftX, bottomY);
    cb.LineTo(leftX, topY);
    cb.Stroke();
    //y 轴突出的短横线
    float yAxiseTextLinetWidth = 3f;
    float yAxisTextSpaceAdjust = 2.5f;
    for (float y = yScaleNum; y < yMax; y += yScaleNum)
    {
        float yPoint = bottomY + (yScale * y);
        cb.MoveTo(leftX, yPoint);
        cb.LineTo(leftX - yAxiseTextLinetWidth, yPoint);
        cb.Stroke();
    }
    //y 轴文本
    for (float y = yScaleNum; y < yMax; y += yScaleNum)
    {
            float yPoint = bottomY + (yScale * y);
            ColumnText.ShowTextAligned(cb, Element.ALIGN_RIGHT, new Phrase(string.Format("{0}%", y), new Font(BF_Light, 5)), leftX - yAxiseTextLinetWidth, yPoint - yAxisTextSpaceAdjust, 0);
    }

    //x 轴
    cb.MoveTo(leftX, bottomY);
    cb.LineTo(righX, bottomY);
    cb.Stroke();

    cb.Stroke();
    cb.RestoreState();
    cbline.RestoreState();
}

最后将这个类和对应的PdfPCell关联起来:

//画图的类,和cell关联
ResolutionChart chart = new ResolutionChart(fileName, yMax, yScale);
cell.CellEvent = chart;

以下就是效果图:

总结

用iTextSharp进行开发,如果报表只有文本,图片则PdfPCell一个类就可以搞定。但如果要画一些bar chart,bar chart,这些图是需要坐标来呈现,我们可以通过IPdfPCellEvent接口获取坐标,然后画相应的图,最后就是代码下载了。

时间: 2024-11-30 17:37:52

iTextSharp快速使用指南的相关文章

Win8快速使用指南

Win8客户预览发布啦,全新的操作会不会令你无所适从?如何快速入门玩转Windows8?Windows8快速使用指南中文版助你一臂. Win8装好以后面对全新的Metro界面如何操作?没有触摸屏,只有鼠标键盘行不行?除了metro以外还有哪些新功能可以体验?来看Windows 8快速使用指南吧,图文并茂,最大最全的Windows8预览版使用指南!

搜狗拼音输入法快速上手指南

搜狗拼音输入法快速上手指南(1) 怎样进行翻页选字? 搜狗拼音输入法默认的翻页键是"逗号(,)句号(.)",即输入拼音后,按句号(.)进行向下翻页选字,相当于PageDown键,找到所选的字后,按其相对应的数字键即可输入.我们推荐你用这两个键翻页,因为用"逗号""句号"时手不用移开键盘主操作区,效率最高,也不容易出错. 输入法默认的翻页键还有"减号(-)等号(=)","左右方括号([])",你可以通过&qu

Ubuntu 快速设置指南

快速设置指南 本文仅仅适用于采用i386安装光盘安装的系统,部分内容并不适合Amd64和PPC安装. 因为中间部分包没有相应的Amd64和PPC的对应包,因此会出现找不到该包的情况.如果你是属于这样的系统,请到论坛咨询.   当你刚刚安装完毕之后,我们来花10分钟设置一下系统,让其有一个更加舒适的中文环境. 当你安装完毕后,进入,不论你进入的是中文,还是英文,都来和我一起来创建一个合适的环境. 如果您看到 "$", 的符号, 意思是你必须在终端状态下运行此命令. (应用程序 ->

《Axure RP8产品原型设计快速上手指南》一第1章 基础界面1.1 默认界面

第1章 基础界面 Axure RP8产品原型设计快速上手指南 1.1 默认界面 在经历一个个漫长的beta版本之后,我们终于迎来了Axure RP8版本的正式发布,其LOGO从以极具扁平化的蓝色为主色调进化以紫色为主色调.Axure的每一次版本发布都是整个产品界瞩目的事件,从RP7版本刚发布我们就在畅想RP8版本的发布会有哪些变化. 从本次发布的版本来看,Axure RP8在整体UI方面更加扁平化,更加突出一些核心功能和灰度原型的精髓,添加和改善了一些功能.从本节开始我们会一点点介绍全新的Axu

PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解_php技巧

PHP导出EXCEL快速开发指南phpexcel有专有的开发文档,详细操作请参考其开发文档,本文档只是对其在使用上作了优化整合,便于在新项目中快速开发.phpexcel生成文件同样有两种方式,一种方式为直接输出,一种方式为生成静态文件.直接输出:主文件为(class目录的同目录文件): 复制代码 代码如下: <?php include("./class/class.php"); // 包含class的基本头文件include("./class/phpexcel/PHPE

Oracle RMAN快速入门指南_oracle

正在看的ORACLE教程是:Oracle RMAN快速入门指南.前言: 这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经验,里面的实验也基本全在WIN 2K和ORACLE 8.1.6环境下测试成功(因为这个环境比较容易实现). 本文借鉴了网上一些高手的相关文章,希望大侠们不要见怪,此处一并谢过. 这篇文章主要是在北京出差期间写的,回到家后整理修改了一下,时间比较仓促,同时因为篇幅有限,一些技术细节不能一一覆盖了,只希望能够帮助新手入门的作用,想真正熟练掌握RMAN,必须经过较长时间

OpenLDAP快速入门指南

以下是 OpenLDAP2.3 的一个快速入门指南,包括独立的LDAP 守护程序,slapd(8).这就意味着你可以通过一些必要的基本步骤来安装和配置 OpenLDAP 软件.它应该同本文档的其他章节.手册页以及随各发行版提供的其他材料(如安装文档)或在 OpenLDAP 网站上(尤其是 OpenLDAP 软件 FAQ).&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;如果您打算认真运行 OpenLDAP 软件的话

SQLite快速入门指南_数据库其它

1. 介绍 SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制文件存在即可开始创建.连接和使用数据库.如果您正在寻找一个嵌入式数据库项目或解决方案,SQLite是绝对值得考虑. 2. 安装 SQLite on Windows     进入 SQL 下载页面:http://www.sqlite.

《Axure RP8产品原型设计快速上手指南》一导读

前 言 Axure RP8产品原型设计快速上手指南会Axure的不一定是产品经理,产品经理一定要会Axure. 当然这只是一句玩笑话,不会Axure的照样也可以做出.做好产品.Axure对于一个做产品的人究竟意味着什么,可能不同的人有不同的感受.这里说说我的Axure经历. 2011年在我还不知道什么是产品的时候,我对接一个网站改版的项目.刚开始我在和技术团队沟通时特别困难,我知道我要做成什么样子,但是无法描述出来,对接过程一度出现僵局.这个时候第一次在WebPPD论坛上接触到了Axure,说到