jar包依赖
<!-- iText start-->
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
<!-- itext 中文支持 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<!-- iText end-->
<!-- https://mvnrepository.com/artifact/org.jfree/jcommon -->
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jcommon</artifactId>
<version>1.0.24</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jfree/jfreechart -->
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.0</version>
</dependency>
关键代码
package com.nk.common;
import java.awt.Color;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtils;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
public class PDFTest {
private static final String FILE_URL = "C:\\Users\\jj\\Desktop\\NIKEY\\";
private static final int alarmNum = 123;
public static void main(String[] args) {
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream(FILE_URL+"hello01.pdf"));
document.open();
//设置中文样式(不设置,中文将不会显示)
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font fontChinese_title = new Font(bfChinese, 20, Font.BOLD, BaseColor.BLACK);
Font fontChinese_content = new Font(bfChinese, 10, Font.NORMAL, BaseColor.BLACK);
Paragraph paragraph_title = new Paragraph("这是一个标题", fontChinese_title);
paragraph_title.setAlignment(Paragraph.ALIGN_CENTER);
Paragraph paragraph_title_1 = new Paragraph("01总概括", fontChinese_content);
paragraph_title_1.setAlignment(Paragraph.ALIGN_JUSTIFIED);
Paragraph paragraph_content = new Paragraph("本期发生告警数量一共"+alarmNum+"次", fontChinese_content);
paragraph_content.setFirstLineIndent(20);
document.add(paragraph_title);
document.add(paragraph_title_1);
document.add(paragraph_content);
document.newPage();
Image img = Image.getInstance(FILE_URL+"N03S{0KBD3NLW8(M}G0{UMR.png");
img.setAlignment(Image.ALIGN_CENTER);
img.scaleAbsolute(328, 370);
document.add(img);
/**
* 生成统计图
*/
PieDataset dataset = pieDataSet();
JFreeChart chart = ChartFactory.createPieChart3D(
" 项目进度分布", // chart title
dataset,// data
true,// include legend
true,
false
);
PiePlot3D plot=(PiePlot3D)chart.getPlot();
//设置Label字体
plot.setLabelFont(new java.awt.Font("微软雅黑", java.awt.Font.BOLD, 12));
//设置legend字体
chart.getLegend().setItemFont(new java.awt.Font("微软雅黑", java.awt.Font.BOLD, 12));
// 图片中显示百分比:默认方式
//plot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));
// 设置背景色为白色
chart.setBackgroundPaint(Color.white);
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(1.0f);
// 指定显示的饼图上圆形(false)还椭圆形(true)
plot.setCircular(true);
// 设置图标题的字体
java.awt.Font font = new java.awt.Font(" 黑体",java.awt.Font.CENTER_BASELINE,20);
TextTitle title = new TextTitle("项目状态分布");
title.setFont(font);
chart.setTitle(title);
FileOutputStream fos_jpg = null;
try {
fos_jpg=new FileOutputStream("D:\\项目状态分布.jpg");
ChartUtils.writeChartAsJPEG(fos_jpg,0.7f,chart,800,1000,null);
fos_jpg.close();
} catch (Exception e) {
e.printStackTrace();
}
document.newPage();
Paragraph pieParagraph = new Paragraph("02、饼状图测试", fontChinese_content);
pieParagraph.setAlignment(Paragraph.ALIGN_LEFT);
document.add(pieParagraph);
Image pieImage = Image.getInstance("D:\\项目状态分布.jpg");
pieImage.setAlignment(Image.ALIGN_CENTER);
pieImage.scaleAbsolute(328, 370);
document.add(pieImage);
/**
* 折线图
*/
CategoryDataset lineDataset = lineDataset();
JFreeChart lineChart = ChartFactory.createLineChart("java图书销量",
"java图书",
"销量",
lineDataset,
PlotOrientation.VERTICAL,
true,
true,
true
);
lineChart.getLegend().setItemFont(new java.awt.Font("微软雅黑", java.awt.Font.BOLD, 16));
//获取title
lineChart.getTitle().setFont(new java.awt.Font("微软雅黑", java.awt.Font.BOLD, 16));
//获取绘图区对象
CategoryPlot linePlot = lineChart.getCategoryPlot();
linePlot.setBackgroundAlpha(0.1f);
//获取坐标轴对象
CategoryAxis lineAxis = linePlot.getDomainAxis();
//设置坐标轴字体
lineAxis.setLabelFont(new java.awt.Font("微软雅黑", java.awt.Font.BOLD, 12));
//设置坐标轴标尺值字体(x轴)
lineAxis.setTickLabelFont(new java.awt.Font("微软雅黑", java.awt.Font.BOLD, 12));
//获取数据轴对象(y轴)
ValueAxis rangeAxis = linePlot.getRangeAxis();
rangeAxis.setLabelFont(new java.awt.Font("微软雅黑", java.awt.Font.BOLD, 12));
/*
* 生成图片
*/
FileOutputStream fos = null;
try {
fos = new FileOutputStream("D:\\java图书销量.jpg");
ChartUtils.writeChartAsJPEG(fos, 0.7f, lineChart, 600, 300);
} catch (Exception e) {
e.printStackTrace();
}
Paragraph lineParagraph = new Paragraph("02、折线图测试", fontChinese_content);
lineParagraph.setAlignment(Paragraph.ALIGN_LEFT);
document.add(lineParagraph);
Image image = Image.getInstance("D:\\java图书销量.jpg");
image.setAlignment(Image.ALIGN_CENTER);
image.scaleAbsolute(600, 300);
document.add(image);
System.out.println("over");
document.close();
} catch (FileNotFoundException | DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static CategoryDataset lineDataset() {
DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
//添加第一季度数据
dataSet.addValue(6000, "第一季度", "J2SE类");
dataSet.addValue(3000, "第一季度", "J2ME类");
dataSet.addValue(12000, "第一季度", "J2EE类");
//添加第二季度数据
dataSet.addValue(8000, "第二季度", "J2SE类");
dataSet.addValue(4000, "第二季度", "J2ME类");
dataSet.addValue(6000, "第二季度", "J2EE类");
//添加第三季度数据
dataSet.addValue(5000, "第三季度", "J2SE类");
dataSet.addValue(4000, "第三季度", "J2ME类");
dataSet.addValue(8000, "第三季度", "J2EE类");
//添加第四季度数据
dataSet.addValue(8000, "第四季度", "J2SE类");
dataSet.addValue(2000, "第四季度", "J2ME类");
dataSet.addValue(9000, "第四季度", "J2EE类");
return dataSet;
}
private static PieDataset pieDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue(" 市场前期", new Double(10));
dataset.setValue(" 立项", new Double(15));
dataset.setValue(" 计划", new Double(10));
dataset.setValue(" 需求与设计", new Double(10));
dataset.setValue(" 执行控制", new Double(35));
dataset.setValue(" 收尾", new Double(10));
dataset.setValue(" 运维",new Double(10));
return dataset;
}
}