JAVA使用itextpdf插件生成pdf

使用itextpdf插件实现pdf生成

1.引入pdf的依赖如下:

 <dependency>
            <groupId>org.jfree</groupId>
            <artifactId>jfreechart</artifactId>
            <version>1.0.19</version>
        </dependency>
        <dependency>
            <groupId>org.jfree</groupId>
            <artifactId>jcommon</artifactId>
            <version>1.0.23</version>
        </dependency>
        <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>

 2.测试代码如下:

import com.itextpdf.text.*;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
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 java.awt.*;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * @author
 * @description: TODO
 * @date
 */
public class PDFTest {

    private static final String FILE_URL = "D:\\software\\";
    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();

            /**
             * 生成统计图
             */
            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");
                ChartUtilities.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");
                ChartUtilities.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;
    }
}

3.运行成功查看文件如下:

文件:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海兴辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值