最近写了一个Aspose.Words生成图表的功能,在这期间真是遇到了很多坑啊,坑坑不一样啊。最开始我们用的16.8.0版本,因为这个版本是公司提供的,唯一好处就是有证书,所以生成出来的的word文档有无水印,而且里面也是插入的ECharts图,然后最近一个项目的周月季报告生成,里面的表格要求图表用word里面的,就是可以自己导出来还可以任意改图表风格数据,原来的16.8就有问题,首先图表里面柱状图的数字不出来。网上一搜各种方法,但是实际上,这个每个版本不一样,很多方法没有。所以为了解决
1、能修改如柱状图的标题样式
2、指定柱状图颜色
3、柱状图上显示数据
4、生成的word没有水印
所以自己写了下面这个代码Aspose.Words正版的太贵了,有条件请使用正版,此文档只是说明利用破解的包进行开发,仅供学习使用懂的都懂,不多说。先来个百度云连接,能保证下面的方法都有(花费了20块买的,,去掉水印、证书了的包)aspose-words-24-crack.jar代替了aspose-words-24.1-jdk17.jar。我这里只有Java 2024的,其他的语言没有,有需要找原主(博客:blog.csdn.net/LiHaoHang6?…
不出意外永久有效
百度云网盘地址:aspose-words-24-crack.jar 下载pan.baidu.com/share/init?surl=FhAc-wzsw0mPe41su6LrRw&pwd=7jcf
添加图片注释,不超过 140 字(可选)
本文将对一段使用Aspose.Words库生成Word文档并插入图表的Java代码进行逐段解析。通过这些代码,可以快速创建包含图表的Word文档,展现数据的可视化效果。当然前面写过可以将word转PDF,所以生成PDF也可以结合zhuanlan.zhihu.com/p/574562404…
代码概览
以下是完整代码首先的结构示例:
public static void main(String[] args) throws Exception {
// 初始化Aspose.Words
AsposeLicenseUtil.judgeLicense("word");
// 创建一个新的文档和一个DocumentBuilder对象
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
appendChart1(builder);
// 保存文档
doc.save("E:/Temp/xx/AsposeWordCreateChart1.docx");
}
1. 主方法 main
public static void main(String[] args) throws Exception {
// 初始化Aspose.Words
AsposeLicenseUtil.judgeLicense("word");
在main方法中,我们首先调用AsposeLicenseUtil.judgeLicense("word")来验证Aspose.Words的许可证确保使用功能不受限制。若没有正确的许可证,将会限制某些功能的使用。
2. 创建Word文档和文档构建器
// 创建一个新的文档和一个DocumentBuilder对象
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
接下来,我们使用Document类创建一个新的文档实例,同时利用DocumentBuilder类实例化一个构建器,这样我们可以通过构建器方便地向文档中插入元素,如文本、图表等。
3. 调用添加图表的方法
appendChart1(builder);
在这里,调用appendChart1(builder)方法,这个方法将会负责在页面中插入一个图表。接下来,我们在appendChart1方法中进行详细操作。
4. 保存文档
// 保存文档
doc.save("E:/Temp/xx/AsposeWordCreateChart1.docx");
}
最后,通过调用doc.save()方法将生成的文档保存到指定路径。确保路径有效,最终用户可以查看和使用生成的文档。
添加图表的方法 appendChart1
private static void appendChart1(DocumentBuilder builder) throws Exception {
// 获取宽度
PageSetup pageSetup = builder.getPageSetup();
double width = pageSetup.getPageWidth() - pageSetup.getRightMargin() - pageSetup.getLeftMargin();
在appendChart1方法内,我们首先获取页面的设置,计算可用宽度(考虑左右边距),以便为图表设置适当的宽度。
图表插入
// 插入一个图表
Shape shape = builder.insertChart(ChartType.COLUMN, width, 200);
shape.getFont().setSize(100);
通过调用builder.insertChart(),我们在文档中插入一个柱状图(ChartType.COLUMN)。图表的宽度为之前计算的可用宽度,高度为200。随后,我们设置图表的字体大小为100。
设置图表标题及格式
// 设置图表数据
Chart chart = shape.getChart();
chart.getAxisY().getNumberFormat().setFormatCode("0%");
ChartTitle title = chart.getTitle();
title.setText("title xxx");
title.setRunAttr(190, 20);
这段代码获取图表实例,并设置Y轴的数据格式为百分比格式("0%")。接着,设置图表的标题为“title xxx”,并调整标题的字体大小为20,以增强其可读性。
数据系列设置
ChartSeriesCollection series = chart.getSeries();
series.clear();
String[] categories = {"Item 1", "Item 2", "Item 3", "Item 4"};
series.add("Series 1", categories, new double[]{8.1 / 100, 2, 3, 4});
series.add("Series 2", categories, new double[]{4, 3, 2, 1});
series.add("Series 3", categories, new double[]{8, 5, 2, 9});
series.add("Series 4", categories, new double[]{7, 4, 4, 1});
清空现有的数据系列,然后定义分类数据(categories)并添加四个数据系列到图表中。每个系列包含相同的分类,但有不同的数值,代表不同的数据集。
数据点和数据标签设置
// 让柱状图上显示值
for (int i = 0; i < series.getCount(); i++) {
ChartSeries s = series.get(i);
ChartDataPointCollection points = s.getDataPoints();
ChartDataLabelCollection labels = s.getDataLabels();
String format = String.valueOf(1.11).contains(".") ? "0.##%" : "0%";
labels.getNumberFormat().setFormatCode(format);
//柱状图上显示数字
labels.setShowValue(true);
ChartFormat fillFormat = s.getFormat();
fillFormat.getFill().setColor(Color.orange); // 默认填充颜色
switch (i) {
case 0:
fillFormat.getFill().setColor(new Color(79, 129, 189));
break;
case 1:
fillFormat.getFill().setColor(new Color(192, 80, 77));
break;
case 2:
fillFormat.getFill().setColor(new Color(155, 187, 89));
break;
case 3:
fillFormat.getFill().setColor(new Color(224, 177, 70));
break;
}
labels.getFont().setSize(7);
}
这段代码使每个数据系列的柱状图上显示数据标签。通过循环遍历每个系列,设置数据标签的格式,并为每个系列指定不同的颜色,以使数据可视化更加直观,美观。数据标签的字体大小设置为7。
完成图表
Range range = shape.getRange();
shape.getFont().setSize(100.0);
System.out.println("xx");
}
最后,获取图表的范围,并设置图表的字体大小为100。执行完这段代码后,图表的创建过程完成,我们可以在Word文档中查看生成的图表效果。
结论
通过以上代码,我们可以看到如何使用Aspose.Words库轻松插入和自定义Word文档中的图表。该库提供了丰富的API,可以满足更多的文档处理需求,如文本插入、图表更新、样式设置等。希望这个示例代码能够帮助开发者们快速入门Aspose.Words的使用。
完整代码测试:
public class Test {
public static void main(String[] args) throws Exception {
// 初始化Aspose.Words
AsposeLicenseUtil.judgeLicense("word");
// 创建一个新的文档和一个DocumentBuilder对象
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
appendChart1(builder);
// 保存文档
doc.save("E:/Temp/xx/AsposeWordCreateChart1.docx");
}
private static void temp() throws Exception {
Document doc = new Document("E:/Temp/xx/AsposeWordCreateChart1.docx");
// 通过索引访问文档中的Shape
Shape shape = (Shape) doc.getChild(NodeType.SHAPE, 0, true); // 0是Shape的索引
// 设置Shape文字的大小
shape.getFont().setSize(20.0); // 设置文字大小为20
// 保存文档
doc.save("E:/Temp/xx/output.docx");
}
public static void appendChart1(DocumentBuilder builder) throws Exception {
// 获取宽度
PageSetup pageSetup = builder.getPageSetup();
double width = pageSetup.getPageWidth() - pageSetup.getRightMargin() - pageSetup.getLeftMargin();
// 插入一个图表
Shape shape = builder.insertChart(ChartType.COLUMN, width, 200);
shape.getFont().setSize(100);
// 设置图表数据
Chart chart = shape.getChart();
// chart.getAxisX().getNumberFormat().setFormatCode("0%");
chart.getAxisY().getNumberFormat().setFormatCode("0%");
ChartTitle title = chart.getTitle();
title.setText("title xxx");
//修改字体大小----看源码找的,这个包里没有getFont()方法
title.setRunAttr(190,20);
// 没看出有什么用
ChartLegend legend = chart.getLegend();
ChartSeriesCollection series = chart.getSeries();
series.clear();
String[] categories = {"Item 1", "Item 2", "Item 3", "Item 4"};
series.add("Series 1", categories, new double[]{8.1/100, 2, 3, 4});
series.add("Series 2", categories, new double[]{4, 3, 2, 1});
series.add("Series 3", categories, new double[]{8, 5, 2, 9});
series.add("Series 4", categories, new double[]{7, 4, 4, 1});
// 让柱状图上显示值
for (int i = 0; i < series.getCount(); i++) {
ChartSeries s = series.get(i);
ChartDataPointCollection points = s.getDataPoints();
ChartDataLabelCollection labels = s.getDataLabels();
String format = String.valueOf(1.11).contains(".") ? "0.##%" : "0%";
labels.getNumberFormat().setFormatCode(format);
//柱状图上显示数字
labels.setShowValue(true);
ChartFormat fillFormat = s.getFormat();
fillFormat.getFill().setColor(Color.orange);// 默认填充颜色
switch (i) {
case 0:
fillFormat.getFill().setColor(new Color(79, 129, 189));
break;
case 1:
fillFormat.getFill().setColor(new Color(192, 80, 77));
break;
case 2:
fillFormat.getFill().setColor(new Color(155, 187, 89));
break;
case 3:
fillFormat.getFill().setColor(new Color(224, 177, 70));
break;
}
labels.getFont().setSize(7);
}
Range range = shape.getRange();
shape.getFont().setSize(100.0);
}
}
效果图:
添加图片注释,不超过 140 字(可选)