【发布时间】:2017-11-08 03:45:19
【问题描述】:
我已经用 XWPF 文档工作了几个星期了,但我无法添加图表。饼图、条形图。我计划手动将带有 XML 的图表注入到文件中,但我认为它过多。我只想将图表添加到 Docx 模板。 Aspose 和 javadocx 不是选项。
XWPFDocument document = new XWPFDocument(getClass().getResourceAsStream("/templates/standard.docx"));
//INSERT PIE CHART
FileOutputStream out = new FileOutputStream(new File("output/output.docx");
document.write(out);
[更新 - 捷径]
由于成功编写注入方法需要时间,iv 找到了一种方便的(快速 n 脏)添加图表的方法。这不是普通的单词图表,而是从库中生成的,存储为图片并插入的图表。
首先,我从http://knowm.org/open-source/xchart/xchart-example-code下载了库。
其次,您已经实现了 XWPF 文档,您创建了一个图表并将其附加为图像。
private XWPFDocument add_chart(XWPFDocument document)
{
// New Chart Element
CategoryChart chart = new CategoryChartBuilder().width(500).height(400).theme(Styler.ChartTheme.GGPlot2).title(getClass().getSimpleName()).build();
chart.setTitle("Issue Count");
// Customize Chart
Color[] sliceColors = new Color[]{new Color(27, 50, 119), new Color(58, 146, 56), new Color(0, 161, 222), new Color(154, 205, 102), new Color(246, 199, 182)};
chart.getStyler().setSeriesColors(sliceColors);
// Series
chart.addSeries("Critical", new ArrayList<>(Arrays.asList(new String[]{"Count"})), new ArrayList<>(Arrays.asList(new Number[]{10})));
chart.addSeries("High", new ArrayList<>(Arrays.asList(new String[]{"High"})), new ArrayList<>(Arrays.asList(new Number[]{5})));
chart.addSeries("Medium", new ArrayList<>(Arrays.asList(new String[]{"Medium"})), new ArrayList<>(Arrays.asList(new Number[]{2})));
chart.addSeries("Low", new ArrayList<>(Arrays.asList(new String[]{"Low"})), new ArrayList<>(Arrays.asList(new Number[]{1})));
// Create and store a jpg image of the chart, then append it to the document
BitmapEncoder.saveBitmapWithDPI(chart, "tmp.jpg", BitmapFormat.JPG, 300);
document.createParagraph().createRun().addPicture(new FileInputStream("tmp.jpg"), XWPFDocument.PICTURE_TYPE_JPEG, "tmp.jpg", Units.toEMU(500), Units.toEMU(400));
return document;
}
【问题讨论】:
-
在此处插入代码 ^
-
是的,你几乎必须自己写。 XSSF 中仅最低限度地支持图表,而 XWPF 则完全不支持。您将不得不使用 CT 类来自己构建它。如果您确实制定出一两种图表类型,则可能会欢迎捐赠回社区。span>
标签: java apache-poi docx