aspose.words -> Edit word without template (including pie chart, columnar, etc.)

Dynamically edit  this article based on  aspose.words -> word document content for further expansion

New chart dependency:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
</dependency>

Code:

package com.test.util.aspose;

import com.aspose.words.*;
import lombok.var;

import java.io.InputStream;

public class CreatePdf {

    public static void create() {
        if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
            System.out.println("水印码故障....");
        }

        try {
            // 没有基于模板创建word
            Document doc = new Document();
            // 建立DocumentBuilder物件
            DocumentBuilder builder = new DocumentBuilder(doc);
            // 设置纸张布局
            builder.getPageSetup().setPaperSize(PaperSize.LETTER);
            builder.getRowFormat().getBorders().setLineStyle(LineStyle.THICK);
            builder.getRowFormat().setHeightRule(HeightRule.AUTO);
            // 一行间距1.0等于12点。所以1.5行=18点
            builder.getParagraphFormat().setLineSpacing(18);    // 设置行间距

            // 文档的标题
            setHeadTitle(builder, "文本头部标题");

            // 一、文本内容
            setParagraphTitle(builder, "一、文本内容");
            String dlhj = "武汉市位于湖北省东部、长江与汉水交汇处,地理位置为北纬29°58′-31°22′,东经113°41′-115°05′。武汉市东西最大横距134千米,南北最大纵距约155千米,最东端位于新洲区徐古街将军山村,最西端位于蔡甸区侏儒街国光村,最南端位于江夏区湖泗街道均堡村,最北端位于黄陂区蔡店街道李冲村。截至2017年末,武汉市土地面积8569.15平方千米,建城区面积628平方千米。";
            setWordContext(builder, dlhj);
            String xzqh = "武汉市下辖江岸区、江汉区、硚口区、汉阳区、武昌区、青山区、洪山区、蔡甸区、江夏区、黄陂区、新洲区、东西湖区、汉南区等13个区,总面积8569.15平方千米,常住人口1108.1万人,地区生产总值1.48万亿元。";
            setWordContext(builder, xzqh);

            // 二、图形
            setParagraphTitle(builder, "二、图形");
            setWordContext(builder, "(一)饼形图");
            setBxt(builder);
            setWordContext(builder, "(二)折线图");
            setZzt(builder);

            doc.save("D:\\test.docx");
            doc.save("D:\\test.pdf");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置总标题
     *
     * @param builder
     * @param title
     */
    private static void setHeadTitle(DocumentBuilder builder, String title) {
        builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);   // 水平居中对齐
        builder.getFont().setName("黑体");    // 字体
        builder.getFont().setSize(24);       // 字体大小
        builder.getFont().setBold(true);     // 加粗
        builder.writeln(title);
        builder.write("\n");    // 空一行
    }

    /**
     * 设置段落标题
     *
     * @param builder
     * @param title
     */
    private static void setParagraphTitle(DocumentBuilder builder, String title) {
        builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT); // 左对齐
        builder.getParagraphFormat().setFirstLineIndent(0); // 首字不缩进
        builder.getFont().setName("黑体");    // 字体
        builder.getFont().setSize(24);       // 大小
        builder.getFont().setBold(true);     // 加粗
        builder.writeln(title);
    }

    /**
     * 拼写正文内容
     *
     * @param builder
     * @param context
     */
    private static void setWordContext(DocumentBuilder builder, String context) {
        builder.getParagraphFormat().setFirstLineIndent(24); // 缩进
        builder.getFont().setName("宋体");    // 字体
        builder.getFont().setSize(14);       // 字体大小
        builder.getFont().setBold(false);    // 不加粗
        builder.writeln(context);
    }


    /**
     * 饼形图
     *
     * @param builder
     */
    private static void setBxt(DocumentBuilder builder) {
        // 类别
        String[] categories = new String[]
                {
                        "类别1", "类别2", "类别3"
                };
        // 值
        double[] values = new double[]
                {
                        300, 400, 300
                };
        String title = "三大类类占比";
        addPieChart(builder, ChartType.PIE, title, categories, values);
    }

    /**
     * 柱状图
     *
     * @param builder
     */
    private static void setZzt(DocumentBuilder builder) {
        // 类别
        String[] categories = new String[]
                {
                        "类别1", "类别2", "类别3"
                };
        // 值
        double[] values = new double[]
                {
                        100, 50, 300
                };
        String title = "三大类类占比";
        addPieChart(builder, ChartType.COLUMN, title, categories, values);
//        addPieChart(builder, ChartType.AREA, title, categories, values);
    }

    /**
     * 加载统计图
     *
     * @param builder
     * @param chatType   统计图类型
     * @param title      统计图标题
     * @param categories 统计图字段
     * @param values     统计图字段数据
     */
    private static void addPieChart(DocumentBuilder builder, int chatType, String title, String[] categories, double[] values) {
        builder.getParagraphFormat().setFirstLineIndent(0);
        builder.writeln("");
        try {
            var shape = builder.insertChart(chatType, 432, 252);
            shape.setVerticalAlignment(VerticalAlignment.CENTER);
            shape.setHorizontalAlignment(HorizontalAlignment.CENTER);
            shape.setAllowOverlap(false);   // 不覆盖
            Chart chart = shape.getChart();
            ChartSeriesCollection seriesCollection = chart.getSeries();
            seriesCollection.clear();   // 清除默认
            chart.getLegend().setPosition(LegendPosition.BOTTOM);   // 显示在下面
            // 添加数据
            var ct = chart.getTitle();
            ct.setOverlay(false);   // 不覆盖
            var cl = chart.getLegend();
            cl.setOverlay(false);   // 不覆盖
            var chatSeries = seriesCollection.add(title, categories, values);
            // 设置数据显示
            ChartDataLabelCollection dataLabelCollection = chatSeries.getDataLabels();
            for (int i = 0; i < categories.length; i++) {
                ChartDataLabel chartDataLabel = dataLabelCollection.add(i);
                chartDataLabel.setShowLegendKey(true);
                chartDataLabel.setShowLeaderLines(false);
                chartDataLabel.setShowCategoryName(true);
                chartDataLabel.setShowPercentage(true);
                chartDataLabel.setShowSeriesName(false);
                chartDataLabel.setShowValue(true);
                chartDataLabel.setSeparator("\r\n");
                chartDataLabel.getNumberFormat().setFormatCode("0.00%");    // 设置数字格式
            }
            chatSeries.setSmooth(true);
            builder.writeln("");
            builder.getParagraphFormat().setFirstLineIndent(2);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static boolean getLicense() {
        boolean result = false;
        try {
            InputStream is = CreatePdf.class.getClassLoader().getResourceAsStream("xml/license.xml");
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

}

Generate effect:

Guess you like

Origin blog.csdn.net/weixin_42629433/article/details/114578564