1. 程式人生 > 其它 >使用spire.doc免費版SDK匯出word只支援500行問題解決

使用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();
    }
}

最後

大家如果有商用需求請使用正版或尋找其他開源替代方案,本文僅供測試交流使用