posts - 78, comments - 34, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

         今日教育办公系统结束。新内容有:导出数据到PDF文档、生成图表(饼图、柱图...),整体上操作比较简单。

 

一、创建PDF文档

         我们使用iText创建PDF文档,需要到http://itextpdf.com/ 下载jar包,同时需要具有iTextAsian.jar包,它为我们提供中亚洲语言的支持。

 

         PDF文档与昨天的Excel表格相比,它有什么特征?PDF是一种国际化标准文档,可以向文档中添加文字、表格、图片、动画、3D、脚本语言...,在实际应用中我们一般只用到文字、表格和图片。创建PDF文档只需两个操作对象:DocumentPDFWriter

        

         下面我直接通过Java工程来说明创建PDF的过程。

package cn.itcast.cc.pdf;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import org.junit.Test;

import com.lowagie.text.Document;

import com.lowagie.text.Element;

import com.lowagie.text.Font;

import com.lowagie.text.Jpeg;

import com.lowagie.text.Paragraph;

import com.lowagie.text.Phrase;

import com.lowagie.text.pdf.BaseFont;

import com.lowagie.text.pdf.ByteBuffer;

import com.lowagie.text.pdf.PdfPCell;

import com.lowagie.text.pdf.PdfPTable;

import com.lowagie.text.pdf.PdfWriter;

 

public class TestPdf {

 

       @Test

       public void testpdf() throws Exception {

              // 创建Document实例

              Document doc = new Document();

              // 创建书写器Writerdoc对象关联

              PdfWriter.getInstance(doc, new FileOutputStream("C:/mypdf.pdf")); // ③打开文档。

              // 打开文档

              doc.open();

              // 添加英语

              doc.add(new Paragraph("Hello PDF!"));

              // 添加中文

              BaseFont bf = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

              Font font = new Font(bf,18,Font.UNDEFINED);

              doc.add(new Paragraph("你好PDF", font));

              // 添加表格

              PdfPTable table = new PdfPTable(2);

              PdfPCell cell = new PdfPCell(new Phrase("性别", font));

              cell.setHorizontalAlignment(Element.ALIGN_CENTER);

              cell.setColspan(2);

              table.addCell(cell);

              table.addCell(new Phrase("", font));

              table.addCell(new Phrase("", font));

              doc.add(table);

              // 添加图片

              byte[] buf = new byte[1024];

              FileInputStream fis = new FileInputStream(new File("C:/tiger.jpeg"));

              ByteBuffer bytebuf = new ByteBuffer();

              int len = 0;

              while((len = fis.read(buf)) != -1){

                     bytebuf.append(buf, 0, len);

              }            

              doc.add(new Jpeg(bytebuf.getBuffer(), 100, 100));

              // 关闭文档,自动保存到文件。

              doc.close();

       }

}

 

 

二、创建图表

         我们使用JFreeChartCewolf创建图表,可以创建柱状图、饼图、曲线图、甘特图等。可以用于桌面程序(Swing)和WEB应用。Cewolf是基于JFreeChart的,它使用JFreeChart的绘图引擎。Cewolf用于WEB应用,在服务器端生成图表数据发送给JSP页面,在JSP页面中使用cewolf标签即可将数据转换为图片。

 

         在此我只编写使用JFreeChart创建饼形图和使用Cewolf创建柱形图两个示例,其他图形的创建可以参看文档。

 

         1.JFreeChart创建饼形图

package cn.itcast.cc.jfreechart;

 

import java.awt.Font;

import java.io.FileOutputStream;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartUtilities;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PiePlot;

import org.jfree.data.general.DefaultPieDataset;

import org.junit.Test;

 

public class TestJFreeChart {

       @Test

       public void test() throws Exception {

              // 生成PieDataset数据

              DefaultPieDataset dataset = new DefaultPieDataset();

              dataset.setValue("日本", 10);

              dataset.setValue("美国", 20);

              dataset.setValue("中国", 70);

              // 创建图表

              JFreeChart chart = ChartFactory.createPieChart3D("人口比例", dataset,

                            false, false, false);

              // 需要设置中文字体,否则乱码。

              Font font = new Font("微软雅黑", Font.PLAIN, 18);

              chart.getTitle().setFont(font);

              PiePlot plot = (PiePlot) chart.getPlot();

              plot.setLabelFont(font);

              plot.setForegroundAlpha( 0.8f);

              plot.setCircular(true);

              // 保存图表数据到PNG图片

              ChartUtilities.writeChartAsPNG(new FileOutputStream("C:/people.png"),

                            chart, 400, 300);

       }

}

 

         2.Cewolf创建柱形图

         1).servlet的内容:

package cn.itcast.cc.servlet.cewolf;

 

import java.io.IOException;

import java.util.Date;

import java.util.Map;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.jfree.data.category.DefaultIntervalCategoryDataset;

import de.laures.cewolf.DatasetProducer;

 

public class CewolfServlet extends HttpServlet {

 

       private static final long serialVersionUID = 1L;

 

       protected void doGet(HttpServletRequest request,

                     HttpServletResponse response) throws ServletException, IOException {

              // 生成数据

              DatasetProducer categoryData = new DatasetProducer() {

                     public Object produceDataset(Map params) {

 

                            final String[] categories = { "一季度", "二季度", "三季度", "四季度" };

                            final String[] seriesNames = { "研发部", "销售部", "教育部", "项目部" };

                            final Integer[][] startValues = new Integer[seriesNames.length][categories.length];

                            final Integer[][] endValues = new Integer[seriesNames.length][categories.length];

                           

                            for (int series = 0; series < seriesNames.length; series++) {

                                   for (int i = 0; i < categories.length; i++) {

                                          int y = (int) (Math.random() * 10 + 1);

                                          startValues[series][i] = new Integer(y);

                                          endValues[series][i] = new Integer(y

                                                        + (int) (Math.random() * 10));

                                   }

                            }

 

                            DefaultIntervalCategoryDataset ds = new DefaultIntervalCategoryDataset(

                                          seriesNames, categories, startValues, endValues);

                            return ds;

 

                     }

 

                     public String getProducerId() {

                            return "CategoryDataProducer";

                     }

 

                     public boolean hasExpired(Map params, Date since) {

                            return false;

                     }

 

              };

              // 添加到Request

              request.setAttribute("categoryData", categoryData);

              // 转发到test.jsp页面

              request.getRequestDispatcher("testcewolf.jsp").forward(request, response);

 

       }

 

}

 

        

         2).JSP页面的内容:

<%@ page language="java" contentType="text/html; charset=UTF-8"

       pageEncoding="UTF-8"%>

<%@ taglib prefix="cewolf"

       uri="http://cewolf.sourceforge.net/taglib/cewolf.tld"%>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

       <cewolf:chart id="horizontalBarChart3D" title="年度部门薪水比率"

              type="horizontalBar3D" xaxislabel="季度" yaxislabel="比率">

              <cewolf:data>

                     <cewolf:producer id="categoryData" />

              </cewolf:data>

       </cewolf:chart>

       <cewolf:img chartid="horizontalBarChart3D" renderer="/cewolf"

              width="300" height="300" />

</body>

</html>

 

         3).WEB.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

       id="WebApp_ID" version="2.5">

       <display-name>cewolf</display-name>

       <welcome-file-list>

              <welcome-file>index.html</welcome-file>

              <welcome-file>index.htm</welcome-file>

              <welcome-file>index.jsp</welcome-file>

       </welcome-file-list>

       <!-- 我们的Servlet -->

       <servlet> 

              <description></description>

              <display-name>testcewolf</display-name>

              <servlet-name>testcewolf</servlet-name>

              <servlet-class>org.simpleit.cewolf.CewolfServlet</servlet-class>

       </servlet>

       <servlet-mapping>

              <servlet-name>testcewolf</servlet-name>

              <url-pattern>/testcewolf</url-pattern>

       </servlet-mapping>

 

       <!-- cewolfServlet -->

       <servlet>

              <servlet-name>CewolfServlet</servlet-name>

              <servlet-class>de.laures.cewolf.CewolfRenderer</servlet-class>

              <!-- sets storage implementation -->

              <init-param>

                     <param-name>storage</param-name>

                     <param-value>de.laures.cewolf.storage.TransientSessionStorage</param-value>

              </init-param>

              <!-- sets overlib.js location relative to webapp -->

              <init-param>

                     <param-name>overliburl</param-name>

                     <param-value>/etc/overlib.js</param-value>

              </init-param>

              <!-- turn on or off debugging logging -->

              <init-param>

                     <param-name>debug</param-name>

                     <param-value>true</param-value>

              </init-param>

              <load-on-startup>1</load-on-startup>

       </servlet>

 

       <servlet-mapping>

              <servlet-name>CewolfServlet</servlet-name>

              <url-pattern>/cewolf/*</url-pattern>

       </servlet-mapping>

 

</web-app>

 

         明日起就开始休年假了,为期11天。一定要安排好学习计划!

 


只有注册用户登录后才能发表评论。


网站导航: