iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java根据word模板生成word文档并转成PDF文件
  • 232
分享到

Java根据word模板生成word文档并转成PDF文件

javawordpdfchart 2023-09-09 05:09:27 232人浏览 安东尼
摘要

1. 处理Word模板 1.1 定义word模版 1.2 定义完我们的模板之后,我们要将文档保存为xml的格式 定义完我们的模板之后,我们要将文档保存为xml的格式 1.3 xml格式化

1. 处理Word模板

1.1 定义word模版

word模版

1.2 定义完我们的模板之后,我们要将文档保存为xml的格式

定义完我们的模板之后,我们要将文档保存为xml的格式

在这里插入图片描述

1.3 xml格式化

生成的xml格式看起来比较乱,没有层次感, 所以需要格式化一下

格式化

格式化xml

1.4 修改xml

基础信息的定义

基础信息的定义只要保证我们转化成的xml文件中的${name}等格式没错误即可

在这里插入图片描述
表格的定义

遍历实现,表格的数据填充
在xml文件中我们的 代表是我们的表格 , 代表的是我们的行 , 代表我们的列
我们要想使用表格的方式,肯定大部分是要使用我们的list集合进行数据填充的,我们可以通过下面的方式进行遍历填充数据
我们在表格的表头下的上添加

<#list TestList as item></#list>

在这里插入图片描述
图片的定义

首先我们要在指定位置添加一个图片,我们保存为xml文件后,我们的图片信心会变为base64转码的字符串,将这部分进行删除,替换为${images},所以我们进行填充时也要是base64转码后的数据

在这里插入图片描述

修改xml文件为ftl文件

最后将我们的文件修改为 .ftl 格式的文件复制到我们 templates文件夹下

在这里插入图片描述

2. 生成word文档

2.1 引入依赖

            org.freemarker        freemarker        2.3.30    

2.2 代码实现

定义我们要填充的数据

  public Map<String,Object> dataMap() throws ioException {        //获取基础数据        Map<String , Object> map = new HashMap<>();        map.put("name","Qtt");        map.put("age","25");         //获取表格数据        List<Map<String,Object>> bookList = new ArrayList<>();        for (int i = 0; i < 5; i++) {            Map<String, Object> map1 = new HashMap<>();            map1.put("month",i);            map1.put("income", i);            map1.put("expense", i +100);            bookList.add(map1);        }        map.put("bookList",bookList);         //获取图片流且进行base64转码        File file = new File("C:\\Users\\Administrator\\Desktop\\teacher\\01.jpg");        FileInputStream fileInputStream = new FileInputStream(file);        byte[] bytes = new byte[fileInputStream.available()];        fileInputStream.read(bytes);        BASE64Encoder base64Encoder = new BASE64Encoder();        String encode = base64Encoder.encode(bytes);        map.put("images",encode);        //关闭流        fileInputStream.close();                return map;    }

定义我们我们的填充方法

public void insertWord() throws IOException, TemplateException {      //定义我们的编码方式      Configuration configuration = new Configuration();      configuration.setDefaultEncoding("UTF-8");      //指定我们word的目录      configuration.setDirectoryForTemplateLoading(new File("src/main/resources/templates"));      //指定我们要使用的word模板.ftl      Template template = configuration.getTemplate("testModel.ftl", "UTF-8");      //指定输出流到的位置      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:/222/demo.doc"), "UTF-8"));      //执行填充输出      template.process(this.dataMap(),bufferedWriter);      //关闭io流      bufferedWriter.flush();      bufferedWriter.close();  }

我们还可以直接定义为下载,不用使用输出流指定下载地址,直接通过下载的方式指定地址

@GetMapping("/upload")   public void upload(httpservletResponse response){       try {           //定义我们的编码方式           Configuration configuration = new Configuration();           configuration.setDefaultEncoding("UTF-8");           //指定我们word的目录           configuration.setDirectoryForTemplateLoading(new File("src/main/resources/templates"));           //指定我们要使用的word模板.ftl           Template template = configuration.getTemplate("testModel.ftl", "UTF-8");           //返回word文档           SimpleDateFORMat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");           String format = simpleDateFormat.format(new Date());           String fileName = URLEncoder.encode("接口文档" + format, "UTF-8");           response.setCharacterEncoding("UTF-8");           //请求头定义为下载           response.setHeader("Content-Disposition","attachment;filename="+fileName+".doc");           //获取apiDoc所需要的数据           Map<String, Object> map = dataMap();           //渲染模板           template.process(map, response.getWriter());           //response的Writer不需要我们手动关,Tomcat会帮我们关的       } catch (Exception e) {           log.error("导出word异常:", e);       }   }

注意:
1.优为注意:freemarker是不支持 null 的,所以我们的数据要么全部附上值,要么给为空的值设置为 " " ,否则会报错
2.我们在定义表格l遍历填充的时候,一定要注意传入的表格字段类型是list,不能是map,否则会报错

3. java后台生成柱状图图片并存到本地

3.1 引入依赖

            cn.hutool    hutool-all    5.6.2    org.jfree    jfreechart    1.5.3

3.2 系统字体

复制一下, 粘贴到项目

在这里插入图片描述

3.3 默认字体位置

在这里插入图片描述

3.4 代码

3.4.1 JFreeChart工具

package com.util; import cn.hutool.core.util.StrUtil;import org.jfree.chart.*;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.labels.*;import org.jfree.chart.plot.*;import org.jfree.chart.renderer.cateGory.*;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;import org.jfree.chart.ui.*;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.data.general.DefaultPieDataset;import org.springframework.core.io.ClassPathResource; import java.awt.*;import java.io.File;import java.io.IOException;import java.text.NumberFormat;import java.util.List; public class JFreeChartUtil {    public static String NO_DATA_MSG = "数据加载失败";         public static StandardChartTheme createChartTheme(String fontName) throws Exception {        StandardChartTheme theme = new StandardChartTheme("unicode") {            public void apply(JFreeChart chart) {                chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,                        RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);                super.apply(chart);            }        };        theme.setExtraLargeFont(getDefaultFont(Font.PLAIN, 20f));        theme.setLargeFont(getDefaultFont(Font.PLAIN, 14f));        theme.setRegularFont(getDefaultFont(Font.PLAIN, 12f));        theme.setSmallFont(getDefaultFont(Font.PLAIN, 10f));        return theme;    }         public static Font getDefaultFont(int style, Float size) throws Exception {        //获取宋体文件        File defaultFontFile = new ClassPathResource("/font/simsun.ttc").getFile();        Font defaultFont = Font.createFont(Font.TRUETYPE_FONT, defaultFontFile);        defaultFont = defaultFont.deriveFont(style, size);        return defaultFont;    }         public static DefaultPieDataset createDefaultPieDataset(List<String> legendNameList, List<Object> dataList) {        DefaultPieDataset dataset = new DefaultPieDataset();        //图例名称列表或数据列表为空        if (legendNameList == null || legendNameList.size() <= 0 || dataList == null || dataList.size() <= 0) {            return dataset;        }        for (int i = 0; i < legendNameList.size() && legendNameList.size() == dataList.size(); i++) {            String value = dataList.get(i).toString();            dataset.setValue(legendNameList.get(i), Double.valueOf(value));        }        return dataset;    }         public static void setPieRender(Plot plot) {        plot.setNoDataMessage(NO_DATA_MSG);        plot.setInsets(new RectangleInsets(10, 10, 5, 10));        PiePlot piePlot = (PiePlot) plot;        piePlot.setInsets(new RectangleInsets(0, 0, 0, 0));        piePlot.setCircular(true);// 圆形         // 简单标签        piePlot.setLabelGap(0.01);        piePlot.setInteriorGap(0.05D);        // 图例形状        piePlot.setLegendItemShape(new Rectangle(10, 10));        piePlot.setIgnoreNullValues(true);        // 去掉标签背景色        piePlot.setLabelBackgroundPaint(null);        //去掉图表背景颜色        piePlot.setBackgroundPaint(null);        // 去掉阴影        piePlot.setLabelShadowPaint(null);        // 去掉边框        piePlot.setLabelOutlinePaint(null);        piePlot.setShadowPaint(null);        // 显示标签数据        piePlot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{2}"));    }         public static DefaultCategoryDataset createDefaultCategoryDataset(List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList) {        DefaultCategoryDataset dataset = new DefaultCategoryDataset();        //图例名称列表、x轴名称列表或数据列表为空        if (xAxisNameList == null || xAxisNameList.size() <= 0 || legendNameList == null || legendNameList.size() <= 0                || dataList == null || dataList.size() <= 0) {            return dataset;        }        for (int yAxisIndex = 0; yAxisIndex < legendNameList.size() && legendNameList.size() == dataList.size(); yAxisIndex++) {            String legendName = legendNameList.get(yAxisIndex);            List<Object> rowList = dataList.get(yAxisIndex);            //该组数据不存在或该组数据总数不等于x轴数据数量            if (rowList == null || rowList.size() != xAxisNameList.size()) {                continue;            }            for (int xAxisIndex = 0; xAxisIndex < rowList.size(); xAxisIndex++) {                String value = rowList.get(xAxisIndex).toString();                dataset.setValue(Double.parseDouble(value), legendName, xAxisNameList.get(xAxisIndex));            }        }        return dataset;    }         public static void setBarRenderer(CategoryPlot plot, boolean isshowDataLabels) {        plot.setNoDataMessage(NO_DATA_MSG);        plot.setInsets(new RectangleInsets(10, 10, 5, 10));        BarRenderer renderer = (BarRenderer) plot.getRenderer();        // 设置柱子最大宽度        renderer.setMaximumBarWidth(0.175);        //设置图表背景颜色(透明)        plot.setBackgroundPaint(null);        //显示数据值标记        if (isShowDataLabels) {            renderer.setDefaultItemLabelsVisible(true);        }        renderer.setDefaultItemLabelGenerator(new StandardCategoryItemLabelGenerator());        //注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题        renderer.setDefaultPositiveItemLabelPosition(new ItemLabelPosition(                ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));         setXAixs(plot);        setYAixs(plot);    }         public static void setLineRender(CategoryPlot plot, boolean isShowDataLabels, boolean isShapesVisible) {        plot.setNoDataMessage(NO_DATA_MSG);        plot.setInsets(new RectangleInsets(10, 10, 0, 10), false);        LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();        //设置图表背景颜色(透明)        plot.setBackgroundPaint(null);        renderer.setDefaultStroke(new BasicStroke(1.5F));        //显示数据标签        if (isShowDataLabels) {            renderer.setDefaultItemLabelsVisible(true);            renderer.setDefaultItemLabelGenerator(new StandardCategoryItemLabelGenerator(StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING,                    NumberFormat.getInstance()));            // 位置            renderer.setDefaultPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE1, TextAnchor.BOTTOM_CENTER));        }        // 数据点绘制形状        renderer.setDefaultShapesVisible(isShapesVisible);        setXAixs(plot);        setYAixs(plot);     }         public static void setScatterRender(XYPlot plot) {        plot.setNoDataMessage(NO_DATA_MSG);        plot.setInsets(new RectangleInsets(10, 10, 0, 10), false);        //设置图表背景颜色(透明)        plot.setBackgroundPaint(null);        setXAixs(plot);        setYAixs(plot);    }         public static void setXAixs(CategoryPlot plot) {        Color lineColor = new Color(31, 121, 170);        // X坐标轴颜色        plot.getDomainAxis().setAxisLinePaint(lineColor);        // X坐标轴标记|竖线颜色        plot.getDomainAxis().setTickMarkPaint(lineColor);     }         public static void setXAixs(XYPlot plot) {        Color lineColor = new Color(31, 121, 170);        // X坐标轴颜色        plot.getDomainAxis().setAxisLinePaint(lineColor);        // X坐标轴标记|竖线颜色        plot.getDomainAxis().setTickMarkPaint(lineColor);        // x轴网格线条        plot.setDomainGridlinePaint(new Color(192, 192, 192));    }         public static void setYAixs(CategoryPlot plot) {        Color lineColor = new Color(192, 208, 224);        ValueAxis axis = plot.getRangeAxis();        // Y坐标轴颜色        axis.setAxisLinePaint(lineColor);        // Y坐标轴标记|竖线颜色        axis.setTickMarkPaint(lineColor);        // 隐藏Y刻度        axis.setAxisLineVisible(false);        axis.setTickMarksVisible(false);        // Y轴网格线条        plot.setRangeGridlinePaint(new Color(192, 192, 192));        plot.setRangeGridlineStroke(new BasicStroke(1));        // 设置顶部Y坐标轴间距,防止数据无法显示        plot.getRangeAxis().setUpperMargin(0.1);        // 设置底部Y坐标轴间距        plot.getRangeAxis().setLowerMargin(0.1);     }         public static void setYAixs(XYPlot plot) {        Color lineColor = new Color(192, 208, 224);        ValueAxis axis = plot.getRangeAxis();        // Y坐标轴颜色        axis.setAxisLinePaint(lineColor);        // Y坐标轴标记|竖线颜色        axis.setTickMarkPaint(lineColor);        // 隐藏Y刻度        axis.setAxisLineVisible(false);        axis.setTickMarksVisible(false);        // Y轴网格线条        plot.setRangeGridlinePaint(new Color(192, 192, 192));        // 设置顶部Y坐标轴间距,防止数据无法显示        plot.getRangeAxis().setUpperMargin(0.1);        // 设置底部Y坐标轴间距        plot.getRangeAxis().setLowerMargin(0.1);    } }

3.4.2 GenerateChartUtil图表生成工具类

package com.jfreechart; import cn.hutool.core.collection.CollectionUtil;import cn.hutool.core.util.StrUtil;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtils;import org.jfree.chart.JFreeChart;import org.jfree.chart.StandardChartTheme;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.block.BlockBorder;import org.jfree.chart.labels.ItemLabelAnchor;import org.jfree.chart.labels.ItemLabelPosition;import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.renderer.category.CategoryItemRenderer;import org.jfree.chart.ui.RectangleEdge;import org.jfree.chart.ui.TextAnchor;import org.jfree.chart.util.Rotation;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.xy.XYDataset; import java.awt.*;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStream;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.List; public class GenerateChartUtil {         public static JFreeChart createBarChart(String chartTitle, List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList, StandardChartTheme theme, String yAxisTitle, String xAxisTitle, Double yAxisMinValue            , Double yAxisMaxValue, List<Color> legendColorList, Boolean barLabelVisible, String barLabelFormat) {        //设置主题,防止中文乱码        theme = theme == null ? JFreeChartUtil.createChartTheme("") : theme;        ChartFactory.setChartTheme(theme);        //创建柱状图        JFreeChart chart = ChartFactory.createBarChart(chartTitle, xAxisTitle, yAxisTitle                , JFreeChartUtil.createDefaultCategoryDataset(legendNameList, xAxisNameList, dataList));        // 设置抗锯齿,防止字体显示不清楚        chart.setTextAntiAlias(false);        // 对柱子进行渲染        JFreeChartUtil.setBarRenderer(chart.getCategoryPlot(), true);CategoryPlot plot = (CategoryPlot) chart.getPlot();        CategoryAxis categoryAxis = plot.getDomainAxis();        // 最大换行数        categoryAxis.setMaximumCategoryLabelLines(10);        //y轴        ValueAxis valueAxis = chart.getCategoryPlot().getRangeAxis();        if (yAxisMinValue != null) {            valueAxis.setLowerBound(yAxisMinValue);        }        if (yAxisMaxValue != null) {            valueAxis.setUpperBound(yAxisMaxValue);        }        CategoryItemRenderer customBarRenderer = plot.getRenderer();        //显示每个柱的数值        if (barLabelVisible != null) {            customBarRenderer.setDefaultItemLabelsVisible(barLabelVisible);            //柱体数值格式            if (StrUtil.isNotEmpty(barLabelFormat)) {                customBarRenderer.setDefaultItemLabelGenerator(new StandardCategoryItemLabelGenerator(barLabelFormat, NumberFormat.getInstance()));            }        }        //设置系列柱体背景颜色        if (CollectionUtil.isNotEmpty(legendColorList)) {            for (int i = 0; i < legendNameList.size() && i < legendColorList.size(); i++) {                Color color = legendColorList.get(i);                if (color == null) {                    continue;                }                customBarRenderer.setSeriesPaint(i, color);            }        }        // 设置标注无边框        chart.getLegend().setFrame(new BlockBorder(Color.WHITE));        // 标注位于上侧        chart.getLegend().setPosition(RectangleEdge.TOP);        return chart;    }         public static void createBarChart(OutputStream outputStream, String chartTitle, List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList, StandardChartTheme theme, String yAxisTitle, String xAxisTitle, int width, int height            , Double yAxisMinValue, Double yAxisMaxValue, List<Color> legendColorList, Boolean barLabelVisible, String barLabelFormat) {        JFreeChart chart = createBarChart(chartTitle, legendNameList, xAxisNameList, dataList, theme, yAxisTitle, xAxisTitle                , yAxisMinValue, yAxisMaxValue, legendColorList, barLabelVisible, barLabelFormat);        try {            ChartUtils.writeChartAsJPEG(outputStream, 1.0f, chart, width, height, null);        } catch (IOException e) {            e.printStackTrace();        }    }         public static byte[] createBarChart(String chartTitle, List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList, StandardChartTheme theme, String yAxisTitle, String xAxisTitle, int width, int height            , Double yAxisMinValue , Double yAxisMaxValue, List<Color> legendColorList, Boolean barLabelVisible, String barLabelFormat) {        ByteArrayOutputStream bas = new ByteArrayOutputStream();        createBarChart(bas, chartTitle, legendNameList, xAxisNameList, dataList, theme, yAxisTitle, xAxisTitle, width, height                , yAxisMinValue, yAxisMaxValue, legendColorList, barLabelVisible, barLabelFormat);        byte[] byteArray = bas.toByteArray();        return byteArray;    }         public static JFreeChart createStackedBarChart(String chartTitle, List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList, StandardChartTheme theme, String yAxisTitle, String xAxisTitle) {        //设置主题,防止中文乱码        theme = theme == null ? JFreeChartUtil.createChartTheme("") : theme;        ChartFactory.setChartTheme(theme);        //创建堆叠柱状图        JFreeChart chart = ChartFactory.createStackedBarChart(chartTitle, xAxisTitle, yAxisTitle                , JFreeChartUtil.createDefaultCategoryDataset(legendNameList, xAxisNameList, dataList));        // 设置抗锯齿,防止字体显示不清楚        chart.setTextAntiAlias(false);        // 对柱子进行渲染        JFreeChartUtil.setBarRenderer(chart.getCategoryPlot(), true);        // 设置标注无边框        chart.getLegend().setFrame(new BlockBorder(Color.WHITE));        // 标注位于上侧        chart.getLegend().setPosition(RectangleEdge.TOP);        return chart;    }         public static void createStackedBarChart(OutputStream outputStream, String chartTitle, List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList, StandardChartTheme theme, String yAxisTitle, String xAxisTitle, int width, int height    ) {        JFreeChart chart = createStackedBarChart(chartTitle, legendNameList, xAxisNameList, dataList, theme, yAxisTitle, xAxisTitle);        try {            ChartUtils.writeChartAsJPEG(outputStream, 1.0f, chart, width, height, null);        } catch (IOException e) {            e.printStackTrace();        }    }         public static byte[] createStackedBarChart(String chartTitle, List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList, StandardChartTheme theme, String yAxisTitle, String xAxisTitle, int width, int height) {        ByteArrayOutputStream bas = new ByteArrayOutputStream();        createStackedBarChart(bas, chartTitle, legendNameList, xAxisNameList, dataList, theme, yAxisTitle, xAxisTitle, width, height);        byte[] byteArray = bas.toByteArray();        return byteArray;    }         public static JFreeChart createLineChart(String chartTitle, List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList, StandardChartTheme theme, String yAxisTitle, String xAxisTitle) {        //设置主题,防止中文乱码        theme = theme == null ? JFreeChartUtil.createChartTheme("") : theme;        ChartFactory.setChartTheme(theme);        //创建折线图        JFreeChart chart = ChartFactory.createLineChart(chartTitle, xAxisTitle, yAxisTitle                , JFreeChartUtil.createDefaultCategoryDataset(legendNameList, xAxisNameList, dataList));        // 设置抗锯齿,防止字体显示不清楚        chart.setTextAntiAlias(false);        // 对折现进行渲染        JFreeChartUtil.setLineRender(chart.getCategoryPlot(), true, true);        // 设置标注无边框        chart.getLegend().setFrame(new BlockBorder(Color.WHITE));        // 标注位于上侧        chart.getLegend().setPosition(RectangleEdge.TOP);        return chart;    }         public static void createLineChart(OutputStream outputStream, String chartTitle, List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList, StandardChartTheme theme, String yAxisTitle, String xAxisTitle, int width, int height    ) {        JFreeChart chart = createLineChart(chartTitle, legendNameList, xAxisNameList, dataList, theme, yAxisTitle, xAxisTitle);        try {            ChartUtils.writeChartAsJPEG(outputStream, 1.0f, chart, width, height, null);        } catch (IOException e) {            e.printStackTrace();        }    }         public static byte[] createLineChart(String chartTitle, List<String> legendNameList, List<String> xAxisNameList            , List<List<Object>> dataList, StandardChartTheme theme, String yAxisTitle, String xAxisTitle, int width, int height) {        ByteArrayOutputStream bas = new ByteArrayOutputStream();        createLineChart(bas, chartTitle, legendNameList, xAxisNameList, dataList, theme, yAxisTitle, xAxisTitle, width, height);        byte[] byteArray = bas.toByteArray();        return byteArray;    }         public static JFreeChart createScatterPlot(String chartTitle            , XYDataset dataset, StandardChartTheme theme, String yAxisTitle, String xAxisTitle) {        //设置主题,防止中文乱码        theme = theme == null ? JFreeChartUtil.createChartTheme("") : theme;        ChartFactory.setChartTheme(theme);        //创建散点图        JFreeChart chart = ChartFactory.createScatterPlot(chartTitle, xAxisTitle, yAxisTitle                , dataset);        // 设置抗锯齿,防止字体显示不清楚        chart.setTextAntiAlias(false);        //散点图渲染        JFreeChartUtil.setScatterRender(chart.getXYPlot());        // 设置标注无边框        chart.getLegend().setFrame(new BlockBorder(Color.WHITE));        // 标注位于上侧        chart.getLegend().setPosition(RectangleEdge.TOP);        return chart;    }         public static void createScatterPlot(OutputStream outputStream, String chartTitle, XYDataset dataset, StandardChartTheme theme            , String yAxisTitle, String xAxisTitle, int width, int height    ) {        JFreeChart chart = createScatterPlot(chartTitle, dataset, theme, yAxisTitle, xAxisTitle);        try {            ChartUtils.writeChartAsJPEG(outputStream, 1.0f, chart, width, height, null);        } catch (IOException e) {            e.printStackTrace();        }    }         public static byte[] createScatterPlot(String chartTitle, XYDataset dataset, StandardChartTheme theme, String yAxisTitle            , String xAxisTitle, int width, int height) {        ByteArrayOutputStream bas = new ByteArrayOutputStream();        createScatterPlot(bas, chartTitle, dataset, theme, yAxisTitle, xAxisTitle, width, height);        byte[] byteArray = bas.toByteArray();        return byteArray;    }}

3.4.3 chart图示列

3.4.3.1 饼图

在这里插入图片描述

3.4.3.2 3D饼图

在这里插入图片描述

3.4.3.3 柱状图调试代码一

   @GetMapping("/barChart")   public void barChart(HttpServletResponse response) throws IOException {       //x轴名称列表       List<String> xAxisNameList = new ArrayList<>(Arrays.asList("一级", "二级", "三级", "四级", "五级"));       //图例名称列表       List<String> legendNameList = new ArrayList<>(Arrays.asList("李四", "张三"));       //数据列表       List<List<Object>> dataList = new ArrayList<>();       dataList.add(new ArrayList<>(Arrays.asList(100, 90, 5, 6, 2)));       dataList.add(new ArrayList<>(Arrays.asList(2, 0, 3, 4, 5)));       //图例背景颜色       List<Color> legendColorList = new ArrayList<>(Arrays.asList(new Color(65, 105, 225)));       GenerateChartUtil.createBarChart(response.getOutputStream(), "各级变化图", legendNameList, xAxisNameList               , dataList, JFreeChartUtil.createChartTheme("宋体"), "y轴", "x轴"               , 600, 400, 0d, 100d, legendColorList, true, "{2}%");   }

在这里插入图片描述

3.4.3.4 柱状图调试代码二

public static void main(String[] args) throws Exception {        //x轴名称列表        List<String> xAxisNameList = new ArrayList<>(Arrays.asList("一级", "二级", "三级", "四级", "五级"));        //图例名称列表        List<String> legendNameList = new ArrayList<>(Arrays.asList("电压"));        //数据列表        List<List<Object>> dataList = new ArrayList<>();        dataList.add(new ArrayList<>(Arrays.asList(100, 90, 5, 6, 2)));        //图例背景颜色        //指定输出流到的位置        OutputStream os = new FileOutputStream("1.png");        List<Color> legendColorList = new ArrayList<>(Arrays.asList(new Color(81, 86, 225)));        GenerateChartUtil.createBarChart(os, "", legendNameList, xAxisNameList                , dataList, JFreeChartUtil.createChartTheme("宋体"), "电压(mV)", "质量数"                , 600, 400, 0d, 100d, legendColorList, true, "");    }

在这里插入图片描述

3.4.3.5 堆叠柱状图调试代码

   @GetMapping("/stackedBarChart")   public void stackedBarChart(HttpServletResponse response) throws IOException {       //x轴名称列表       List<String> xAxisNameList = new ArrayList<>(Arrays.asList("一级", "二级", "三级", "四级", "五级"));       //图例名称列表       List<String> legendNameList = new ArrayList<>(Arrays.asList("李四", "张三"));       //数据列表       List<List<Object>> dataList = new ArrayList<>();       dataList.add(new ArrayList<>(Arrays.asList(1, 3, 5, 6, 2)));       dataList.add(new ArrayList<>(Arrays.asList(2, 1, 3, 4, 5)));       GenerateChartUtil.createStackedBarChart(response.getOutputStream(), "各级变化图", legendNameList, xAxisNameList               , dataList, JFreeChartUtil.createChartTheme("宋体"), "y轴", "x轴", 600, 400);   }

在这里插入图片描述

3.4.3.6 折线图调试代码

   @GetMapping("/lineChart")   public void lineChart(HttpServletResponse response) throws IOException {       //x轴名称列表       List<String> xAxisNameList = new ArrayList<>(Arrays.asList("一级", "二级", "三级", "四级", "五级"));       //图例名称列表       List<String> legendNameList = new ArrayList<>(Arrays.asList("李四", "张三"));       //数据列表       List<List<Object>> dataList = new ArrayList<>();       dataList.add(new ArrayList<>(Arrays.asList(1, 3, 5, 6, 2)));       dataList.add(new ArrayList<>(Arrays.asList(2, 1, 3, 4, 5)));       GenerateChartUtil.createLineChart(response.getOutputStream(), "各级变化图", legendNameList, xAxisNameList               , dataList, JFreeChartUtil.createChartTheme("宋体"), "y轴", "x轴", 600, 400);   } 

在这里插入图片描述

3.4.3.7 散点图调试代码

      @GetMapping("/scatterPlot")   public void scatterPlot(HttpServletResponse response) throws IOException {       //设置散点图数据集       //设置第一个       XYSeries firefox = new XYSeries("Firefox");       firefox.add(1.0, 1.0);       firefox.add(2.0, 4.0);       firefox.add(3.0, 3.0);       //设置第二个       XYSeries chrome = new XYSeries("Chrome");       chrome.add(1.0, 4.0);       chrome.add(2.0, 5.0);       chrome.add(3.0, 6.0);       //设置第三个       XYSeries ie = new XYSeries("IE");       ie.add(3.0, 4.0);       ie.add(4.0, 5.0);       ie.add(5.0, 4.0);       //添加到数据集       XYSeriesCollection dataset = new XYSeriesCollection();       dataset.addSeries(firefox);       dataset.addSeries(chrome);       dataset.addSeries(ie);       GenerateChartUtil.createScatterPlot(response.getOutputStream(), "各级变化图", dataset               , JFreeChartUtil.createChartTheme("宋体"), "y轴", "x轴", 600, 400);   }

在这里插入图片描述

4. word文档转pdf

4.1 引入依赖

<!--word 转 pdf-->      <dependency>          <groupId>com.documents4j</groupId>          <artifactId>documents4j-local</artifactId>          <version>1.0.3</version>      </dependency>      <dependency>          <groupId>com.documents4j</groupId>          <artifactId>documents4j-transformer-msoffice-word</artifactId>          <version>1.0.3</version>      </dependency>

4.2 代码

public class WordToPdf {    public static void word2pdf(String wordPath, String pdfPath) throws IOException {        InputStream docxInputStream = null;        OutputStream outputStream = null;        try {            // 原word地址            docxInputStream = new FileInputStream(wordPath);            // 转换后pdf生成地址            outputStream = new FileOutputStream(pdfPath);            IConverter converter = LocalConverter.builder().build();            converter.convert(docxInputStream)                    .as(DocumentType.DOCX)                    .to(outputStream)                    .as(DocumentType.PDF).execute();            // 关闭            converter.shutDown();            // 关闭            outputStream.close();            // 关闭            docxInputStream.close();        } catch (Exception e) {            System.out.println("[documents4J] word转pdf失败:" + e.toString());        } finally {            if (outputStream != null) {                outputStream.close();            }            if (docxInputStream != null) {                docxInputStream.close();            }        }    }}

来源地址:https://blog.csdn.net/Cjava_math/article/details/131307227

--结束END--

本文标题: Java根据word模板生成word文档并转成PDF文件

本文链接: https://www.lsjlt.com/news/400750.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java根据word模板生成word文档并转成PDF文件
    1. 处理word模板 1.1 定义word模版 1.2 定义完我们的模板之后,我们要将文档保存为xml的格式 定义完我们的模板之后,我们要将文档保存为xml的格式 1.3 xml格式化 ...
    99+
    2023-09-09
    java word pdf chart
  • java根据自定义的word模板生成文档
    文章目录 一、新建Word模板二、导入依赖三、编写代码1、替换文字2、插入图片 提示:以下是本篇文章正文内容,下面案例可供参考 一、新建Word模板 在你需要动态生成的内容使用{fi...
    99+
    2023-09-28
    java 开发语言 apache maven
  • php如何将word文档转成PDF文件
    本文小编为大家详细介绍“php如何将word文档转成PDF文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何将word文档转成PDF文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。第一步:安装和配置...
    99+
    2023-07-05
  • php怎么将word文档转成PDF文件
    在如今数字化的时代,文档转换成PDF(Portable Document Format)是十分常见的需求,因为PDF是一种跨平台、适用于多种设备和操作系统的文件格式,具有良好的兼容性和可靠的可读性。而php作为一种强大的服务器端编程语言,可...
    99+
    2023-05-14
    php
  • 【导出Word】如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档(只含文本内容的模板)
    这篇文章,主要介绍如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档。 目录 一、导出Word文档 1.1、基础知识 1.2、制作模板文件 1.3、代码实现 (1)引入依赖 (2)创建Freemarke...
    99+
    2023-10-23
    word Java导出Word Freemarker Word文档导出功能 根据模板文件导出Word文档
  • java 导出word,java根据提供word模板导出word文档
    本文主要讲解,利用poi-tl在word中动态生成表格行,进行文字、图片填充。一共提供了两种方式,1.基于本地文件 2.基于网络文件 本文讲解思路,1.先看示例,2. 示例对应的代码展示 3. 基本概念讲解(api自行查阅文档)。 这...
    99+
    2023-08-17
    word java 开发语言
  • Java通过Freemarker模板实现生成Word文件
    目录1.  准备模板2.  代码实现3. PDF文件加水印1.  准备模板 模板 + 数据 = 模型 1、将准备好的Word模板文件另存为.xml文件(...
    99+
    2024-04-02
  • word文档怎么转换成pdf格式
    本篇内容主要讲解“word文档怎么转换成pdf格式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“word文档怎么转换成pdf格式”吧!word文档转换成pdf格式方法:打开word,打开需要转换...
    99+
    2023-07-01
  • caj文件如何转换成word文档
    今天小编给大家分享一下caj文件如何转换成word文档的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。caj文件怎么转换成wo...
    99+
    2023-07-04
  • php怎么生成word文档
    可以使用PHP库PHPWord来生成和操作Word文档。以下是一个简单的示例: 首先,你需要安装PHPWord库。可以通过Comp...
    99+
    2024-03-15
    php
  • Java 将Word文档转换为PDF
    前言本文将介绍如何使用免费Java Word组件Free Spire.Doc for Java在Java应用程序中将Word文档转换到PDF格式。Free Spire.Doc for Java在转换过程中能够识别中文字符并支持丰富的word...
    99+
    2023-06-02
  • Java模板动态生成word文件的方法步骤
    最近项目中需要根据模板生成word文档,模板文件也是word文档。当时思考一下想用POI API来做,但是觉得用起来相对复杂。后来又找了一种方式,使用freemarker模板生成wo...
    99+
    2024-04-02
  • Java如何实现读取txt文件内容并生成Word文档
    目录导入Jar包1. Maven仓库下载导入2. 手动导入读取txt生成Word注意事项本文将以Java程序代码为例介绍如何读取txt文件中的内容,生成Word文档。在编辑代码前,可...
    99+
    2024-04-02
  • 如何将HTML文件转换成Word文档
    随着互联网和信息技术的不断进步,越来越多的人开始使用网页来展示和传递信息。然而,有些情况下我们需要将网页的内容转换成Word文档,例如需要打印文档、需要在Word中编辑等。本文将介绍如何将HTML文件转换成Word文档。一、使用在线转换工具...
    99+
    2023-05-14
  • pdf文件如何转换为word文档
    这篇文章主要介绍了pdf文件如何转换为word文档,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。材料:PDF文件,电脑工具:PDF转换器(迅...
    99+
    2024-04-02
  • java怎么根据xml模板生成xml文件
    在Java中,可以使用DOM(Document Object Model)或者JAXB(Java Architecture for ...
    99+
    2024-03-07
    java
  • JAVA怎么根据流生成PDF文件
    Java中可以使用iText库来根据流生成PDF文件。iText是一个开源的Java库,用于处理PDF文件。首先,需要下载iText...
    99+
    2023-08-15
    JAVA
  • mysql 表结构生成word文档
    1、背景 我们在做项目时,表设计文档都是非常重要的,可以让开发人员快速了解表与业务的关系、表之间的关系。 产品在不停迭代的过程中,表的结构也会有相应的变化,我们需要将变化更新的表设计文档中。以前我们是人工方式更新文档,效率是比较慢的,慢...
    99+
    2023-09-13
    数据库 Powered by 金山文档
  • java根据模板动态生成PDF实例
    一、需求说明:根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看。二、解决方案:iText+FreeMarker+JFreeChart生成可动态配置的PDF文档iText有很强大的PDF处理能力,但是样式和排版不好控...
    99+
    2023-05-31
    java 生成pdf ava
  • PHP使用PHPWord生成word文档
    阅读目录 阐述 安装 使用 自动加载 实例化 添加文字内容 链接 图片 页眉 ...
    99+
    2023-09-03
    php 开发语言 前端
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作