您的位置:首页 > 编程语言 > Java开发

使用Itext结合Jfreechart图表导出带图表的word文档

2016-01-23 17:40 603 查看
1、Itext简介

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。

Itext对word操作就像poi对Excel的操作一样,功能丰富。

2、Itext使用

(1)创建Document

就像新建Word文档一样,你只需要用Document document = new Document(PageSize.A4);创建一个Document对象。

注意:

PageSize.A4 设置word纸张大小,除此之外还有其他参数,一下为Itext的介绍

com.lowagie.text.Document.Document(Rectangle arg0, float marginLeft, float marginRight, float marginTop, float marginBottom)

第一个参数为设置纸张大小,如PageSize.A4

后面的四个float参数为设置word的页面左右上下边距

(2)创建对象后需要创建文档读写器

RtfWriter2.getInstance(document, new FileOutputStream(file));

建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。其中file为保存路径和文档名称如D:/test.doc。然后就是

document.open();打开文档进行读写

(3)文档添加元素

通过document.add()向文档中添加内容,添加的内容必须是Element元素,如Paragraph、Image、Table等常用元素。他们分别是文本段落、图片、表格。

①添加段落

创建段落对象Paragraph theme = new Paragraph(companyTheme);参数为String类型,常用属性设置:

设置位置:theme.setAlignment(Element.ALIGN_CENTER);参数为居中、居左、居右

设置前后距离:相当于行距theme.setSpacingBefore(90)、theme.setSpacingAfter(0)

设置字体:包括字体的大小、颜色、字体类型等。通过theme.setFont(ThemeFont);设置字体他需要Font类型的参数

创建Font对象,通过font设置字体

Font ThemeFont = new Font(setBaseFont(), 18, Font.BOLD);

// 设置标题字体的颜色

ThemeFont.setColor(new Color(0, 0, 129));

而Font需要BaseFont参数对象,创建BaseFont对象来设置字体,如:微软雅黑等

BaseFont macintosh =

BaseFont.createFont(“D:\201404042\ywsf.ttf”,

BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

在网上有看到说Itext不能设置字体,是不对的通过basefont可以随意设置自己想要的字体。

②创建Table对象

Table table1 = new Table(4);// 创建该表格的列数,在本程序中设为4列

int width1[] = { 30, 30, 30, 30 };// 每列的单元格的宽度

table1.setWidths(width1);// 设置每列所占比例

table1.setWidth(90); // 占页面宽度 90%,相当于html中width属性

table1.setAlignment(Element.ALIGN_CENTER);//设置该表格中的元素水平方向居中显示

table1.setAutoFillEmptyCells(true); // 自动填满

table1.setBorderWidth(1); // 边框宽度

table1.setBorderColor(new Color(160, 32, 240)); // 边框颜色

通过table1.addCell()向表格中添加元素元素可以是cell对象也可以是字符串、也可以是图片,如果添加图片的话需要Image对象获取图片。如:

Image img = Image.getInstance(“d:/img.png”);

Cell cell = new Cell(img);

table1.addCell(cell);

项目中的效果如下:利用Jfreechart统计图和Itext结合生成的



然后可以通过document.add()添加到文档中。用到table需要设置它的属性如常用的合并单元格、设置背景色如下图设置:通过设置cell.setColspan(int num); cell.setRowspan(int num);设置单元格的合并。和常用的设置背景border一样background、color 、border等设置



最后关闭document读写document.close();

以下是一个完整的小Demo根据实际调整代码运行。FontSettingC为自定义的设置样式。

Jfreechart生成图参考前面的案例。

package com.lizj_cdoc.exp;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.MalformedURLException;

import java.util.HashMap;

import java.util.LinkedHashMap;

import org.jfree.data.category.CategoryDataset;

import org.jfree.data.category.DefaultCategoryDataset;

import com.lizj_cdoc.Utils.FontSettingC;

import com.lizj_cdoc.jfreechart.CreateChart;

import com.lizj_cdoc.jfreechart.CreateJfreeBarChart;

import com.lizj_cdoc.jfreechart.CreateTable;

import com.lowagie.text.BadElementException;

import com.lowagie.text.Document;

import com.lowagie.text.DocumentException;

import com.lowagie.text.Element;

import com.lowagie.text.Image;

import com.lowagie.text.PageSize;

import com.lowagie.text.rtf.RtfWriter2;

public class ExpModelPersonal {

public void createDocFile(String file) throws DocumentException,

IOException {

// 设置纸张大小

Document document = new Document(PageSize.A4);

// 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中

RtfWriter2.getInstance(document, new FileOutputStream(file));

document.open();

// 将Phrases添加到document文档

document.add(FontSettingC.setFirstTitle(“报告目录”));

document.add(FontSettingC

.setSecondTitle(“(一)领导力行为指标\n” +

“(二)评估整体概况\n” +

“(三)优势与待发展\n” +

“(四)自我认知偏差\n” +

“(五)他评分歧(他评差异大的行为;不同人眼中表现突出的行为)\n” +

“(六)发展建议\n” +

“(七)行动计划\n” +

“(八)附录:文本题反馈\n” +

“(九)附录:得分详情\n”));

document.add(getTargetSpread());
document.close();
}

public static Image setImage(String url)
throws BadElementException, MalformedURLException, IOException {
// 添加图片
Image img_spider = Image.getInstance(url);
// 设置图片大小(H,W)
img_spider.scaleAbsolute(300, 130);
img_spider.setAlignment(Element.ALIGN_CENTER);
img_spider.setSpacingBefore(50);
return img_spider;
}


public static Table getTargetSpread() throws DocumentException,

IOException, ParseException {

Table table1 = new Table(12);// 创建该表格的列数,在本程序中设为5列

int width1[] = { 25, 10, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 };// 每列的单元格的宽度

table1.setWidths(width1);// 设置每列所占比例

table1.setWidth(100); // 占页面宽度 90%,相当于html中width属性

table1.setAlignment(Element.ALIGN_CENTER);// 设置该表格中的元素水平方向居中显示

table1.setAutoFillEmptyCells(true); // 自动填满

table1.setBorderColor(new Color(160, 32, 240)); // 边框颜色

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“素质项”, 2));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“得分”, 2));

table1.addCell(ItextTableStyle.deepBlue(“人员分布”, 4));

table1.addCell(ItextTableStyle.deepBlue(“比例分布”, 4));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“总分居于前20%的是”, 2));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“总分居于后10%的是”, 2));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“1.0分\n↓\n2.0分”, 1));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“2.0分\n↓\n3.0分”, 1));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“3.0分\n↓\n4.0分”, 1));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“4.0分\n↓\n5.0分”, 1));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“1.0分\n↓\n2.0分”, 1));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“2.0分\n↓\n3.0分”, 1));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“3.0分\n↓\n4.0分”, 1));

table1.addCell(ItextTableStyle.DeepBlueRowSpan(“4.0分\n↓\n5.0分”, 1));

Cell cell = new Cell(setImage(“d:/img.png”));

Cell. setColspan (12);

table1.addCell(cell);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jfreechart word Itext