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: