⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdfchartservlet.java

📁 报表工具IReport的例子,实例中包括了生成pdf,html,excel等格式的报表文件.源码中包括了报表和在web上展现的源程序
💻 JAVA
字号:
/**
 * 
 */
package com.hhkj.jasper;

import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.geom.Rectangle2D;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import jfreechart.demo.WebHit;
import jfreechart.demo.WebHitDataSet;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieItemLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.urls.StandardPieURLGenerator;
import org.jfree.data.DefaultPieDataset;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.DefaultFontMapper;
import com.lowagie.text.pdf.FontMapper;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;

/**
 * @author wzj
 * 
 */
public class PdfChartServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("step1");
		doGet(request, response);
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String title = request.getParameter("title");
		System.out.println("title = " + title);

		String beginDate = "2005-09-01";
		String endData = "2005-12-01";
		HttpSession session = null;
		PrintWriter pw = null;
		JFreeChart jfreechart = null;

		int width = 400;
		int height = 300;
		FontMapper mapper = new DefaultFontMapper();

		ByteArrayOutputStream ba = new ByteArrayOutputStream();
		try {
			jfreechart = generatePieChart(beginDate, endData, session, pw);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		writeChartAsPDF(ba, jfreechart, width, height, mapper);

		response.setContentType("application/pdf");
		response.setContentLength(ba.size());
		ServletOutputStream out = response.getOutputStream();
		ba.writeTo(out);
		out.flush();
	}

	public JFreeChart generatePieChart(String beginDate, String endData,
			HttpSession session, PrintWriter pw) throws Exception {

		List list = new ArrayList();
		// Retrieve list of WebHits
		WebHitDataSet whDataSet = new WebHitDataSet();

		list = whDataSet.getDataList(beginDate, endData);

		// Throw a custom NoDataException if there is no data
		if (list.size() == 0) {
			System.out.println("No data has been found");
			throw new Exception();
		}

		// Create and populate a PieDataSet
		DefaultPieDataset data = new DefaultPieDataset();
		Iterator iter = list.listIterator();
		while (iter.hasNext()) {
			WebHit wh = (WebHit) iter.next();
			data.setValue(wh.getSection(), new Long(wh.getHitCount()));
		}

		// Create the chart object
		PiePlot plot = new PiePlot(data);
		plot.setInsets(new Insets(0, 5, 5, 5));
		// 设置链接
		plot.setURLGenerator(new StandardPieURLGenerator("xy_chart.jsp",
				"section"));
		plot.setToolTipGenerator(new StandardPieItemLabelGenerator());
		JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT,
				plot, true);
		chart.setBackgroundPaint(java.awt.Color.white);
		return chart;
	}

	public static void writeChartAsPDF(OutputStream out, JFreeChart chart,
			int width, int height, FontMapper mapper) throws IOException {
		Rectangle pagesize = new Rectangle(width, height);
		Document document = new Document(pagesize, 25, 25, 25, 25);
		try {
			PdfWriter writer = PdfWriter.getInstance(document, out);
			document.addAuthor("JFreeChart");
			document.addSubject("Demonstration");
			document.open();
			document.add(new Paragraph("Hello World"));
			document.add(new Paragraph("Hello 测试"));

			// 设置pdf的输出为中文
			BaseFont bfChinese = BaseFont.createFont("STSong-Light",
					"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
			Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);
			Paragraph par = new Paragraph("世界你好", FontChinese);
			document.add(par);

			PdfContentByte cb = writer.getDirectContent();
			PdfTemplate tp = cb.createTemplate(width, height);

			Graphics2D g2 = tp.createGraphics(width, height, mapper);

			Rectangle2D r2D = new Rectangle2D.Double(0, 0, width, height);
			chart.draw(g2, r2D);
			g2.dispose();
			cb.addTemplate(tp, 0, 0);

		} catch (DocumentException de) {
			System.err.println(de.getMessage());
		}
		document.close();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -