【问题标题】:Apache POI Java - Docx Charts and GraphsApache POI Java - Docx 图表和图表
【发布时间】: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


【解决方案1】:

您可以使用以下位置的自定义poi jar来读取和修改文档文件的图表,然后写入您的实际文档文件。 使用 XWPFChart 类,您可以使用我们为 POI EXCEL/PPT 提供的所有方法。

https://github.com/sandeeptiwari32/POI_ENHN/POI3.14.jar

以下是从 MS-WORD 文件中读取图表的简单示例

public class PoiDocTest {
    public static void main(String arg[]) throws FileNotFoundException, IOException
    {
        @SuppressWarnings("resource")
        XWPFDocument document = new XWPFDocument(new FileInputStream("chart.docx"));
        @SuppressWarnings("unused")
        XWPFChart chart;
        for (POIXMLDocumentPart part : document.getRelations()) {
            if (part instanceof XWPFChart) {
                chart = (XWPFChart) part;
                break;
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多