使用spire.doc免费版SDK导出word只支持500行问题解决

前言

我们在之前版本中调研导出支持编辑Latex公式的word中,采用了spire.doc的组件,但是在英语试卷生成的时候,由于题目较多在生成word的时候报错了,错误的信息很明确,就是免费版本的spire.doc最多支持500个段落,这下歇菜了。

虽然我们这个是和内部使用的系统,但是如果要换方案,还有一堆逻辑需要修改,关键之前的word都是基于spire.doc构建出来的,现在要我重新实现一遍,sorry!我是拒绝的

解决思路

1、网上搜破解版,虽然网上有破解版,但是积分太高,穷人下不起,且破解版有点侵犯知识产权的感觉,虽然没有商用
2、使用其他方案生成word,sorry!我是拒绝的
3、使用Spire.doc收费版,没有经费,自己解决

解决办法

其实Spire.doc收费版是没有500行限制的,但是它在生成word的时候会在word的最上方增加一行体验版的版权声明,但是这个声明在那很突兀,于是

1、使用spire.doc生成完整的word
2、使用POI读取word,如果第一行包含体验声明则删除它,代码如下:

private void restWord(String docFilePath) {
    try (FileInputStream in = new FileInputStream(docFilePath)) {
        XWPFDocument doc = new XWPFDocument(OPCPackage.open(in));
        List<XWPFParagraph> paragraphs = doc.getParagraphs();
        if (paragraphs.size() < 1) return;
        XWPFParagraph firstParagraph = paragraphs.get(0);
        if (firstParagraph.getText().contains("Spire.Doc")) {
            doc.removeBodyElement(doc.getPosOfParagraph(firstParagraph));
        }
        OutputStream out = new FileOutputStream(docFilePath);
        doc.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

最后

大家如果有商用需求请使用正版或寻找其他开源替代方案,本文仅供测试交流使用

posted @ 2021-12-02 20:02  蒲公英的狂想  阅读(6703)  评论(1编辑  收藏  举报