国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java的POI-word模板生成目錄自動(dòng)更新--完美解決

這篇具有很好參考價(jià)值的文章主要介紹了Java的POI-word模板生成目錄自動(dòng)更新--完美解決。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄問(wèn)題:

解決word模板目錄在第一次打開不更新就不顯示目錄問(wèn)題的原因:之前是通過(guò)動(dòng)態(tài)替換域代碼toc的形式,生成了一段域代碼放置在Word的目錄行,打開的時(shí)候無(wú)法直接觸發(fā)渲染和更新。

方案:通過(guò)插入-文檔組件-域組件-目錄和索引,將當(dāng)前的模板的目錄直接生成到文檔的目錄中,在數(shù)據(jù)替換的時(shí)候,由于目錄用的也是正文的內(nèi)容,所以直接就替換掉了。

上述方案解決了需要手動(dòng)更新才能顯示,否則空白的問(wèn)題。但是也存在缺點(diǎn):只能更新目錄的內(nèi)容,目錄的頁(yè)碼無(wú)法正確更新顯示,是當(dāng)時(shí)模板的頁(yè)碼。

------------------------------------------分界線-------------------------------------------------------------------------

項(xiàng)目時(shí)間允許之際,又做了方案調(diào)研,用以下方案,完美解決:

1、spire.doc

有收費(fèi)版本和免費(fèi)版本,免費(fèi)的版本只能讀取500行的內(nèi)容,并生成目錄,所以不全,不用;

收費(fèi)版本的生成word后,會(huì)在文檔第一行顯示試用提示,將該行用poi刪除即可;

先用poi-tl的模板生成word,然后用spire.doc打開,并更新域,再保存到原文件路徑即可,最后將第一行刪掉:


public class Demo4 {
    public static void main (String[] args) throws IOException {
        //加載已設(shè)置大綱級(jí)別的測(cè)試文檔
        long start = System.currentTimeMillis();
        Document doc = new Document("D:\\project\\util\\src\\main\\resources\\poi\\report.docx");

        doc.updateTableOfContents();

        doc.saveToFile("目錄2222311.docx", FileFormat.Docx_2010);
        restWord("目錄2222311.docx");
        System.out.println((System.currentTimeMillis()-start)/1000);
    }
    private static 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();
        }
    }
}

2、aspose.word

aspose.word只有收費(fèi)版本,如果公司允許,可以買了再用,沒有預(yù)算的,可以找一個(gè)破解jar包引入即可,如果找不到,可以私信我:

先用poi-tl的模板生成word,然后用aspose.word打開,并更新域,再保存到原文件路徑即可:

public class Demo5 {
    public static void main (String[] args) throws Exception {
        //加載已設(shè)置大綱級(jí)別的測(cè)試文檔
        long start = System.currentTimeMillis();
        Document doc = new Document("D:\\project\\util\\src\\main\\resources\\poi\\report.docx");
        doc.updateFields();
        doc.save("33333.pdf", SaveFormat.PDF);//這里執(zhí)行操作

//        restWord("目錄33331221.docx");

        System.out.println((System.currentTimeMillis()-start)/1000);
    }
    private static 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);
            XWPFParagraph lastParagraph = paragraphs.get(paragraphs.size() - 1);
            if (firstParagraph.getText().contains("Aspose.Words")) {
                doc.removeBodyElement(doc.getPosOfParagraph(firstParagraph));
                doc.removeBodyElement(doc.getPosOfParagraph(lastParagraph));
            }
            OutputStream out = new FileOutputStream(docFilePath);
            doc.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

總結(jié),公司允許用破解版的,可以用aspose.word,效率高,生成PDF也給力;spire.doc是國(guó)內(nèi)的產(chǎn)品,操作word耗時(shí)長(zhǎng),700+頁(yè)的文檔需要130s+的耗時(shí),不能忍。

-------------------------------------------分界線----------------------------------------------------------------------

以上方案已經(jīng)解決了目錄精確問(wèn)題,在大文件word生成的時(shí)候,還存在2個(gè)問(wèn)題:

1、并發(fā)調(diào)用會(huì)導(dǎo)致線程卡住,卡在new Document()

2、大文件更新目錄的時(shí)候特別慢,也會(huì)出現(xiàn)卡死現(xiàn)象

解決方案:

1、添加synchronized同步鎖,每次只有一個(gè)生成;

2、判斷文件大小超過(guò)nMB時(shí),不調(diào)用精確方法,小于的時(shí)候才調(diào)用,避免不可用問(wèn)題文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-516621.html

到了這里,關(guān)于Java的POI-word模板生成目錄自動(dòng)更新--完美解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java Apache POI 小記(讀取Word通過(guò)模板創(chuàng)建PPT)

    近期身邊的一位朋友來(lái)尋求幫助,她在日常工作時(shí),總是需要做一些重復(fù)的事情,所以想著是否能通過(guò)程序?qū)崿F(xiàn)自動(dòng)化的操作。 具體需求為,每天會(huì)收到一份固定格式的Word文件,然后根據(jù)其中的內(nèi)容,填充到固定的PPT模板中,最終生成圖片輸出。 有了需求后,第一件事自然

    2024年01月19日
    瀏覽(26)
  • Java 使用 poi 和 aspose 實(shí)現(xiàn) word 模板數(shù)據(jù)寫入并轉(zhuǎn)換 pdf 增加水印

    Java 使用 poi 和 aspose 實(shí)現(xiàn) word 模板數(shù)據(jù)寫入并轉(zhuǎn)換 pdf 增加水印

    本項(xiàng)目所有源碼和依賴資源都在文章頂部鏈接,有需要可以下載使用 1. 需求描述 從指定位置讀取一個(gè) word 模板 獲取業(yè)務(wù)數(shù)據(jù)并寫入該 word 模板,生成新的 word 文檔 將新生成的 word 文檔轉(zhuǎn)換為 pdf 格式 對(duì) pdf 文檔添加水印 2. 效果預(yù)覽 word 模板 帶水印的 pdf 文檔 3. 實(shí)現(xiàn)思路

    2024年02月08日
    瀏覽(29)
  • java調(diào)用poi根據(jù)模板生成ppt

    吐槽:像這種需求半年碰不到一個(gè) O.o 可以多去poi官網(wǎng)翻一下官方文檔雖然很難理解但有用? 所有代碼基于個(gè)人習(xí)慣編寫,懶得貼圖了相信兄弟們的理解能力,有問(wèn)題可以留言我盡量解決。 本文所有代碼生成都基于pptx文件編寫,可根據(jù)具體業(yè)務(wù)修改代碼 1.打開模板文件 2.創(chuàng)建

    2024年02月21日
    瀏覽(35)
  • (Java)word轉(zhuǎn)pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)導(dǎo)出

    (Java)word轉(zhuǎn)pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)導(dǎo)出

    目錄 1、引入jar包 2、pdf處理工具類 3、poi模板導(dǎo)出工具類 4、測(cè)試類 5、模板 6、最終效果? 1、引入jar包 ? 2、pdf處理工具類 ?3、poi模板導(dǎo)出工具類 ?4、測(cè)試類 5、模板 6、最終效果?

    2024年02月06日
    瀏覽(33)
  • java 使用POI-TL根據(jù)word模版,生成word文件,含圖片,富文本。

    java 使用POI-TL根據(jù)word模版,生成word文件,含圖片,富文本。

    1.引入mavna坐標(biāo)` 2 .poi-tl-ext插件主要用于富文本內(nèi)容格式在word展現(xiàn) 3.word模版創(chuàng)建 3.具體代碼實(shí)現(xiàn) 4.本文的miniourl路徑實(shí)質(zhì)為網(wǎng)絡(luò)路徑的文件。

    2024年02月16日
    瀏覽(20)
  • JAVA使用POI對(duì)Word docx模板文件替換數(shù)據(jù)工具類并通過(guò)瀏覽器下載到本地

    JAVA使用POI對(duì)Word docx模板文件替換數(shù)據(jù)工具類并通過(guò)瀏覽器下載到本地

    需求:需要上傳一個(gè)帶有占位符的模板至數(shù)據(jù)庫(kù)保存,然后解析模板的占位符,通過(guò)類計(jì)算結(jié)果替換模板中的占位符,并且保存至本地 難點(diǎn):1.由于我數(shù)據(jù)庫(kù)保存是本地保存,并沒有path 所以獲取模板的path是個(gè)難點(diǎn) 2.如何使用計(jì)算類,由于我的類是和占位符綁定的,什么樣的

    2024年02月16日
    瀏覽(28)
  • JAVA poi-tl 制作word模板 表格數(shù)據(jù)行循環(huán) 帶有復(fù)選框勾選的表格

    JAVA poi-tl 制作word模板 表格數(shù)據(jù)行循環(huán) 帶有復(fù)選框勾選的表格

    ????????java項(xiàng)目實(shí)際開發(fā)中經(jīng)常會(huì)遇到制作word表單且表格數(shù)據(jù)行循環(huán)功能,甚至帶有復(fù)選框勾選功能,本文簡(jiǎn)單介紹如何制作模板以及使用poi-tl生成word。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 如果只用到word那么需要導(dǎo)入的依賴如下(本案例只需要如下2個(gè)依

    2024年04月12日
    瀏覽(26)
  • java 根據(jù)word模板生成word文件

    java 根據(jù)word模板生成word文件

    Java可以使用Apache POI庫(kù)來(lái)生成Word文件,并且也可以使用freemarker等模板引擎來(lái)實(shí)現(xiàn)根據(jù)Word模板生成Word文件的功能。 下面是一個(gè)簡(jiǎn)單的示例代碼,可以幫助您快速入門。 模板制作:offer,wps都行,我使用wps進(jìn)行操作? 第一步制作模板 CTRL+f9生成域------》鼠標(biāo)右鍵編輯域------》選

    2024年02月14日
    瀏覽(20)
  • Java使用poi-tl1.9.1生成Word文檔的幾個(gè)小技巧

    Java使用poi-tl1.9.1生成Word文檔的幾個(gè)小技巧

    目錄 前言 一、poi-tl簡(jiǎn)介 1、什么是poi-tl 2、常見的word生成對(duì)比 3、poi-tl功能點(diǎn) 二、poi-tl文檔生成 1、模板準(zhǔn)備 2、目標(biāo)參數(shù)填充 3、生成效果 ?三、可能會(huì)遇到的問(wèn)題 1、混合圖表生成報(bào)錯(cuò) 2、圖表參數(shù)設(shè)置技巧 ?總結(jié) ????????也許在您的工作當(dāng)中會(huì)碰到如下的一些場(chǎng)景,比

    2024年02月16日
    瀏覽(24)
  • Java根據(jù)word模板生成word文檔并轉(zhuǎn)成PDF文件

    Java根據(jù)word模板生成word文檔并轉(zhuǎn)成PDF文件

    定義完我們的模板之后,我們要將文檔保存為xml的格式 生成的xml格式看起來(lái)比較亂,沒有層次感, 所以需要格式化一下 格式化 基礎(chǔ)信息的定義 基礎(chǔ)信息的定義只要保證我們轉(zhuǎn)化成的xml文件中的${name}等格式?jīng)]錯(cuò)誤即可 表格的定義 遍歷實(shí)現(xiàn),表格的數(shù)據(jù)填充 在xml文件中我們的

    2024年02月09日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包