使用spire.doc免費版SDK匯出word只支援500行問題解決
阿新 • • 發佈:2021-12-02
前言
我們在之前版本中調研匯出支援編輯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(); } }
最後
大家如果有商用需求請使用正版或尋找其他開源替代方案,本文僅供測試交流使用