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

【Java】poi-tl 使用Word模板渲染動態(tài)表格

這篇具有很好參考價(jià)值的文章主要介紹了【Java】poi-tl 使用Word模板渲染動態(tài)表格。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

poi-tl 是一個(gè)基于 Apache POI 和 FreeMarker 的 Java 模板引擎,可以用于動態(tài)生成 Word、Excel、PowerPoint 等文檔。使用 poi-tl 可以方便地將數(shù)據(jù)填充到模板中,生成符合要求的文檔。
poi-tl官方文檔地址:http://deepoove.com/poi-tl/#_%E7%89%88%E6%9C%AC

先附上導(dǎo)出效果圖:
poi tl渲染復(fù)雜圖表,java基礎(chǔ),java,開發(fā)語言

1.創(chuàng)建word模板,并將模板放在resource文件夾下

這步建議手動創(chuàng)建,之前客服提供了一個(gè)pdf文件,我把它轉(zhuǎn)成了word,用這個(gè)word當(dāng)模板.結(jié)果意外發(fā)生了,動態(tài)表格數(shù)據(jù)不會自動分頁,所有數(shù)據(jù)都擠在第一頁…改模板,加分頁符…都不好用,最后手動新建一個(gè)模板就好了…

數(shù)據(jù)結(jié)構(gòu):
代碼中可以用對象封裝,也可以用map.

區(qū)塊對是 {{?innerList}} {{/innerList}},我想要的樣式就是循環(huán)這部分內(nèi)容
{{contestExcelList}} 是動態(tài)列表集合

外層out(對象) :date (字符串) innerList(集合)
inner 對象:
title1(字符串)
title2(字符串)
@image(圖片)
contestExcelList(集合)-
contestExcel(對象):num(字符串)
projectName(字符串)
score(字符串)

poi tl渲染復(fù)雜圖表,java基礎(chǔ),java,開發(fā)語言

2.引入依賴

       <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.10.0</version>
        </dependency>

  <!--word 轉(zhuǎn)pdf 注意依賴是否需要排除,以免沖突-->
<dependency>
            <groupId>org.docx4j</groupId>
            <artifactId>docx4j-JAXB-MOXy</artifactId>
            <version>8.2.9</version>
        </dependency>
 <dependency>
            <groupId>org.docx4j</groupId>
            <artifactId>docx4j-export-fo</artifactId>
            <version>8.2.9</version>
        </dependency>

3.代碼實(shí)現(xiàn)

public void downLoad(HttpServletRequest request, HttpServletResponse response) throws Exception {
List<Map<String, Object>> innerMapList= new ArrayList<>();   //inner集合
 Map<String, Object> innerMap = new HashMap<>();             //inner對象
 
  List<ContestExcel> contestExcelList= new ArrayList<>();    //自己的動態(tài)表格數(shù)據(jù)
  for (int j = 0; j < 10; j++) {
        ContestExcel contestExcelEntity = new ContestExcel();
             contestExcelEntity.setNum(j+1);
             contestExcelEntity.setProjectName("項(xiàng)目名稱");
             contestExcelEntity.setScore("99");
             contestExcelList.add(contestExcelEntity);
  }
  
  innerMap .put("title1", Texts.of("標(biāo)題1").create());
  innerMap .put("title2", Texts.of("標(biāo)題2").create());
  innerMap .put("image", Pictures.ofUrl("圖片url鏈接");
  innerMap .put("contestExcelList", contestExcelList);   
  innerMapList.add(innerMap);
  
 Map<String, Object> outMap= new HashMap<>();  //外層out(對象)
 Date date = new Date();
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   outMap.put("innerList", innerMapList);
   outMap.put("date", sdf.format(date));

 String name = "打分表";
 String destFilePath = TestFileUtil.getPath();

//動態(tài)表格變量可以用[] 對應(yīng)
 LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
        //這里可以指定一個(gè)config類,用來指定一些規(guī)則,也可以改變模板中{{}}的這種格式
        Configure config = Configure.builder()
                .bind("contestExcelEntityList", policy).build();


//獲取模板
InputStream inputStream = ClassUtils
                .getDefaultClassLoader()
                .getResourceAsStream("wordTemplate.docx");  //將模板放在resource文件夾下
//生成docx文件
XWPFTemplate compile = XWPFTemplate.compile(inputStream, config);
        compile.render(map);
        compile.writeToFile(destFilePath + name + ".docx");
        inputStream.close();

//轉(zhuǎn)成pdf文件并導(dǎo)出
        outputMethod(response, toPdf2(destFilePath, name));

轉(zhuǎn)pdf 和導(dǎo)出方法:


//轉(zhuǎn)pdf方法

    public static String toPdf2(String destFilePath, String zipName) throws Exception {
        String destFilePath2 = "";
        char firstChar = destFilePath.charAt(0);
        if (firstChar == '/') {
            destFilePath2 = destFilePath.substring(1);
        } else {
            destFilePath2 = destFilePath;
        }
//此處代碼 參考  https://editor.csdn.net/md/?articleId=133790383
        WordToPdfTest_Docx4j.wordToPdf(destFilePath2 + zipName + ".docx", destFilePath2 + zipName + ".pdf");
        return destFilePath2 + zipName + ".pdf";
    }

}

//導(dǎo)出方法
  public void outputMethod(HttpServletResponse response, String filePath) {

        ServletOutputStream out = null;
//        File file = new File("d:\\test\\result.pdf");
        File file = new File(filePath);
        FileInputStream inputStream = null;
        try {
            out = response.getOutputStream();
            inputStream = new FileInputStream(file);
            if (filePath.contains(".xlsx")) {
                //
                /** 導(dǎo)出excel文件流 */
                response.setHeader("content-Type", "application/vnd.ms-excel");
                response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
                response.setCharacterEncoding("UTF-8");
            } else {

                /** 導(dǎo)出pdf文件流 */
                response.setCharacterEncoding("UTF-8");
                response.setContentType("application/pdf");
                response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
            }


            // 讀取文件流
            int len = 0;
            byte[] buffer = new byte[1024 * 10];
            while ((len = inputStream.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                inputStream.close();
            } catch (IOException e) {
                logger.error("輸入流關(guān)閉失敗, {}", e);
            }
            try {
                out.close();
            } catch (IOException e) {
                logger.error("輸出流關(guān)閉失敗, {}", e);
            }
        }
        file.delete();//刪除.xlsx  或    pdf文件
        if (filePath.contains(".pdf")) {  //如果是pdf ,還需要刪除生成的docx
            File fileDocx = new File(filePath.substring(0, filePath.lastIndexOf(".")) + ".docx");
            fileDocx.delete();
        }

    }

4.前端blob導(dǎo)出參考:

https://editor.csdn.net/md/?articleId=133790129文章來源地址http://www.zghlxwxcb.cn/news/detail-810512.html

到了這里,關(guān)于【Java】poi-tl 使用Word模板渲染動態(tài)表格的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 使用poi-tl向word插入圖片、文本、表格行循環(huán)

    使用poi-tl向word插入圖片、文本、表格行循環(huán)

    工作中難免會向word中操作數(shù)據(jù),本文主要介紹poi-tl的使用,先來看效果圖 核心介紹: 標(biāo)簽 1、插入文本標(biāo)簽 : {{var}} 2、插入圖片標(biāo)簽: {{@var}} 操作步驟: 1、引入依賴 2、Java核心代碼 官方網(wǎng)址:http://deepoove.com/poi-tl/ 1、準(zhǔn)備模版,定義好需要的標(biāo)簽 2、查詢模版 3、獲取需要填

    2024年02月05日
    瀏覽(151)
  • poi-tl的使用(動態(tài)表格的生成)

    poi-tl的使用(動態(tài)表格的生成)

    注意apache.poi版本要對應(yīng) 創(chuàng)建兩個(gè)文件夾,一個(gè)是用來存儲模板文件,另一個(gè)是用來存儲生成的文件 準(zhǔn)備一個(gè)word模板,命名為test.docx, 注意,{{}}是官方指定的格式,也可以自定義。 [ ] 是可替換的屬性 可以是多個(gè) 代碼 生成文件 參考: 使用最全 講解最全

    2024年02月13日
    瀏覽(25)
  • Spring Boot 中使用 Poi-tl 渲染數(shù)據(jù)并生成 Word 文檔

    本文 Demo 已收錄到 demo-for-all-in-java 項(xiàng)目中,歡迎大家 star 支持!后續(xù)將持續(xù)更新! 產(chǎn)品經(jīng)理急沖沖地走了過來?!脯F(xiàn)在需要將按這些數(shù)據(jù)生成一個(gè) Word 報(bào)告文檔,你來安排下」 項(xiàng)目中有這么一個(gè)需求,需要將用戶填寫的數(shù)據(jù)填充到一個(gè) Word 文檔中,而這個(gè) Word 文檔是人家給

    2024年02月09日
    瀏覽(22)
  • poi-tl導(dǎo)出word復(fù)雜表格(單元格合并,生成復(fù)雜表格)

    poi-tl導(dǎo)出word復(fù)雜表格(單元格合并,生成復(fù)雜表格)

    官方文檔地址:http://deepoove.com/poi-tl/ 源碼地址:https://github.com/Sayi/poi-tl poi-tl(poi template language)是Word模板引擎,使用Word模板和數(shù)據(jù)創(chuàng)建很棒的Word文檔。 最近在做項(xiàng)目時(shí)候有一個(gè)關(guān)于導(dǎo)出Word的文件的需求,需要導(dǎo)出的word文件較大,并且格式比較復(fù)雜,使用poi-tl可以很好的

    2024年02月16日
    瀏覽(23)
  • POI-tl 知識整理:整理3 -> 動態(tài)生成表格

    POI-tl 知識整理:整理3 -> 動態(tài)生成表格

    (1)需要渲染的表格的模板 說明 : {{goods}} ?是個(gè)標(biāo)準(zhǔn)的標(biāo)簽,將? {{goods}} ?置于循環(huán)行的上一行,循環(huán)行設(shè)置要循環(huán)的標(biāo)簽和內(nèi)容,注意此時(shí)的標(biāo)簽應(yīng)該使用? [] ?,以此來區(qū)別poi-tl的默認(rèn)標(biāo)簽語法。同理, {{labors}} ?也置于循環(huán)行的上一行。? ? (2)定義兩個(gè)實(shí)體類? (

    2024年01月18日
    瀏覽(16)
  • POI-tl 知識整理:整理1 -> 利用模板向word中寫入數(shù)據(jù)
  • 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-tl導(dǎo)出word及轉(zhuǎn)換PDF后的合并導(dǎo)出pdf

    java使用poi-tl導(dǎo)出word及轉(zhuǎn)換PDF后的合并導(dǎo)出pdf

    為某單位開發(fā)的一款項(xiàng)目申報(bào)審批系統(tǒng),用戶需求在申報(bào)階段填寫的信息資料能夠?qū)С鯬DF。且項(xiàng)目申報(bào)的報(bào)告正文為用戶上傳,所以需要合并導(dǎo)出。 在項(xiàng)目初期階段使用的是PDF的預(yù)設(shè)模板導(dǎo)出,因?yàn)橐郧笆褂眠^,比較熟悉。所以優(yōu)先選擇此方法,但項(xiàng)目測試階段發(fā)現(xiàn)問題,因

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

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

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

    2024年02月16日
    瀏覽(24)
  • poi-tl設(shè)置圖片(通過word模板替換關(guān)鍵字,然后轉(zhuǎn)pdf文件并下載)

    poi-tl設(shè)置圖片(通過word模板替換關(guān)鍵字,然后轉(zhuǎn)pdf文件并下載)

    選中圖片右擊? 選擇設(shè)置圖片格式 ? 例如word模板 ? maven依賴 ? 讀取 ?代碼

    2024年02月11日
    瀏覽(92)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包