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

java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)

這篇具有很好參考價值的文章主要介紹了java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.配置文件的準(zhǔn)備

1.導(dǎo)出功能實現(xiàn)所需要的pom文件

<!--   導(dǎo)出到word(循環(huán)圖片)     -->
        <!-- word導(dǎo)出  方式:easypoi-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.4.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>4.4.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>4.4.0</version>
        </dependency>
        <!--注意:word中要使用循環(huán)等標(biāo)簽必須單獨導(dǎo)入以下依賴-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>ooxml-schemas</artifactId>
            <version>1.4</version>
        </dependency>

這里需要注意的點?。。。。。。。。。。。。。。。。?/h4>

easypoi的版本必須在4.3.0以上,否則在導(dǎo)出圖片的時候,只會導(dǎo)出圖片的內(nèi)存地址,卻不能顯示出圖片。

2.在配置目錄下添加一個配置類

package com.state.grid.substation.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.afterturn.easypoi.word.WordExportUtil;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.util.Assert;

public class WordUtil {
    public static void exportWord(String templatePath, String temDir, String fileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
        Assert.notNull(templatePath,"模板路徑不能為空");
        Assert.notNull(temDir,"臨時文件路徑不能為空");
        Assert.notNull(fileName,"導(dǎo)出文件名不能為空");
        Assert.isTrue(fileName.endsWith(".docx"),"word導(dǎo)出請使用docx格式");
        if (!temDir.endsWith("/")){
            temDir = temDir + File.separator;
        }
        File dir = new File(temDir);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        try {

            String userAgent = request.getHeader("user-agent").toLowerCase();
            if (userAgent.contains("msie") || userAgent.contains("like gecko")) {
                fileName = URLEncoder.encode(fileName, "UTF-8");
            } else {
                fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
            }
            XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
            String tmpPath = temDir + fileName;
            FileOutputStream fos = new FileOutputStream(tmpPath);
            doc.write(fos);
            // 設(shè)置強制下載不打開
            response.setContentType("application/force-download");
            // 設(shè)置文件名
            response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
            OutputStream out = response.getOutputStream();
            doc.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            delFileWord(temDir,fileName);//這一步看具體需求,要不要刪
        }

    }

    /**
     * 刪除零時生成的文件
     */
    public static void delFileWord(String filePath, String fileName) {
        File file = new File(filePath + fileName);
        File file1 = new File(filePath);
        file.delete();
        file1.delete();
    }

}

3.準(zhǔn)備一個導(dǎo)出模板(固定位置填充固定數(shù)據(jù),表格和圖片的循環(huán)導(dǎo)出)

java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)

?解釋一下模板中所填充的東西:

1.像這種:用兩個花括號括起來的變量名,到時候會將變量名所指代的數(shù)據(jù)填充進去

java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)

?2.像這種:需要將批量數(shù)據(jù)循環(huán)導(dǎo)出的表格以及圖片

java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)

?2.功能的實現(xiàn)(寫一個Controller)

調(diào)用service和mapper沒寫,具體以實際需求為準(zhǔn)

1.先理一些這個功能實現(xiàn)的邏輯:

去數(shù)據(jù)庫查表獲取想要的信息----用一個集合將這些信息都裝起來----將這些信息都插入到模板的指定位置當(dāng)中去

2.功能的實現(xiàn)(帶注釋)

這個肯定不能直接拿來運行,注意看我寫的注釋,理解代碼邏輯,我寫的很清楚,每一行代碼干了什么我都有寫。

/**
     * 巡視報告的導(dǎo)出(循環(huán)圖片版)
     * @param substationId
     * @param calendarId
     * @param request
     * @param response
     * @return
     */
    //請求路徑是/taskResultToWord,請求方式是get請求
    @RequestMapping(value = "/taskResultToWord", method = RequestMethod.GET)
    //返回Result類型,傳進來變電站id,日歷id
    public Result taskResultToWord(String substationId, String calendarId, HttpServletRequest request, HttpServletResponse response) throws Exception {  // 分頁查詢
        int code = 0;
        String msg = "";
//        定義List集合list,泛型是TaskResultEquipment
        List<TaskResultEquipment> list = new ArrayList<>();
//        List<TaskProgress> uplist = new ArrayList<>();
        //定義Map集合resmap
//        Map<String, Object> resmap = new HashMap<>();
        try {
            //token驗證
            Des3Util des = new Des3Util();
            String token = request.getHeader("token");
            String jsonUser = des.parseDES(token);
            JSONObject jsonData = JSONObject.fromObject(jsonUser);
            String userId = (String) jsonData.get("u");
            String roleId = (String) jsonData.get("r");

            boolean access = this.roleService.getAccess(roleId, "task/taskList");
            if(access){
                //定義Map集合map
                Map<String, Object> map = new HashMap<>();
                //將輸入的設(shè)備id添加到map集合里面
//                map.put("substationId", substationId);
                //將輸入的日歷id添加到calendarId里面
                map.put("calendarId", calendarId);
                //返回表v_task_result_equipment中的數(shù)據(jù)條數(shù)
                int count = this.taskService.taskResultEquipmentCount(map);

                //將查詢到的基本信息賦給taskProgress
                TaskProgress taskProgress = this.taskService.taskResultInfo(map);
                //添加字段startRow(開始行)的值為0
                map.put("startRow", 0);
                //添加字段endRow(結(jié)束行)的值為count,count的值就是表v_task_result_equipment中的數(shù)據(jù)條數(shù)
                map.put("endRow", count);
                //分頁查詢表v_task_result_equipment中的數(shù)據(jù),起始行是0,結(jié)束行是count,就是一頁查詢所有數(shù)據(jù),
                list = this.taskService.taskResultEquipmentList(map);
                System.out.println(list);

                //路徑
                String path1 = ResourceUtils.getURL("classpath:").getPath();
                String path2 = path1.substring(1);
                String terminalType = System.getProperty("os.name");
                String path = "";
                if (Objects.equals(terminalType, "Linux")){
                    path = path1.replace("ROOT/WEB-INF/classes/", "").replace("ROOT\\WEB-INF\\classes\\", "");
                }else {
                    path = path2.replace("ROOT/WEB-INF/classes/", "").replace("ROOT\\WEB-INF\\classes\\", "");
                }
                System.out.println("path!!!!!!" + path);
                //PATH是文件導(dǎo)出路徑resource/excel/
                String PATH = path + config.getExportUrl();
                //ImagePath是圖片導(dǎo)入路徑resource/cameraImage/
                String ImagePath = path + config.getCameraImageUrl();

                //導(dǎo)出表頭信息
                //定義一個Map集合params
                Map<String, Object> params = new HashMap<>();
                //模板文件的路徑templatePath
                String templatePath = "E:/template/patrolWord.docx"; //模板路徑

                //簡單渲染文本
                params.put("substationName", taskProgress.getSubstationName());
                params.put("voltageLevel", taskProgress.getVoltageLevel());
                params.put("viewStartTime",taskProgress.getViewStartTime());
                params.put("patrolType",taskProgress.getPatrolType());
                params.put("taskName",taskProgress.getTaskName());
                params.put("className",taskProgress.getClassName());
                params.put("totalNumber",taskProgress.getTotalNumber());
                params.put("execresult1",taskProgress.getExecresult1());
                params.put("execresult2",taskProgress.getExecresult2());
                params.put("execresult0",taskProgress.getExecresult0());
                params.put("execresult3",taskProgress.getExecresult3());
                params.put("execStartTime",taskProgress.getExecStartTime());
                params.put("execEndTime",taskProgress.getExecEndTime());

               

                //聲明了一個名為alarms的變量,它是一個List類型,其中每個元素都是一個Map<String, Object>類型的鍵值對集合。
                List<Map<String, Object>> alarms = new ArrayList<>();
                //聲明了一個名為alarm的變量,它是一個Map類型的鍵值對集合。具體來說,這個Map對象中每個鍵都是一個String類型,每個值都是一個Object類型。
                Map<String, Object> alarm;


                //會遍歷list集合中的每個元素,并將每個元素賦值給循環(huán)變量taskResultEquipment。
                // 在每次循環(huán)迭代中,可以使用taskResultEquipment變量來訪問集合中當(dāng)前元素的屬性和方法。
                //數(shù)據(jù)來源是攝像頭
                String source = "攝像頭";
                //序號從1開始
                int order = 1;
                for (TaskResultEquipment taskResultEquipment : list){
                    //img_path得到表中一行數(shù)據(jù)的圖片路徑
                    String img_path = taskResultEquipment.getPicture();
                    //ImagePath是圖片導(dǎo)入路徑resource/cameraImage/,realImagePath是圖片真正的路徑
                    String realImagePath = ImagePath + img_path;
                    //將圖片路徑打印出來
                    System.out.println(realImagePath);

//                    File imagefile = new File(realImagePath);
//                    if (imagefile.exists()){
//                        taskResultEquipment.setImageData(realImagePath);
//                    }else {
//                        String errorFile = ImagePath +  config.getErrorCameraImageUrl();
//                        taskResultEquipment.setImageData(errorFile);
//                    }

                    //創(chuàng)建了一個名為alarm的新的HashMap對象
                    alarm = new HashMap<>();
                    //將循環(huán)中獲取到的信息添加到集合里面
                    //變電站
//                    alarm.put("name", taskResultEquipment.getTaskName());
                    //設(shè)備名稱
                    alarm.put("order",order);
                    alarm.put("equipmentInterval", taskResultEquipment.getEquipmentInterval());
                    alarm.put("equipmentName", taskResultEquipment.getEquipmentName());
                    alarm.put("equipmentPart",taskResultEquipment.getEquipmentPart());
                    alarm.put("pointName", taskResultEquipment.getPointName());
                    alarm.put("importance", taskResultEquipment.getImportance());
                    alarm.put("result", taskResultEquipment.getResult());
                    alarm.put("realAlarmLevel", taskResultEquipment.getRealAlarmLevel());
                    alarm.put("confirmUser", taskResultEquipment.getConfirmUser());
                    alarm.put("execStartTime", taskResultEquipment.getExecStartTime());
                    alarm.put("source",source);
                    //表格內(nèi)循環(huán)添加圖片(easypoi 4.3以后才支持,不然只能打印出ImageEntity的內(nèi)存地址)

                    //創(chuàng)建了一個名為simage的新的ImageEntity對象,并將其賦值給simage變量。
                    // 具體來說,ImageEntity是一個Java類,用于表示一個圖像實體,其中包含了圖像的各種屬性和數(shù)據(jù)。
                    ImageEntity simage = new ImageEntity();
                    simage.setHeight(50);
                    simage.setWidth(50);
                    //將圖片的本地路徑導(dǎo)入進去
                    simage.setUrl(realImagePath);
                    //將simage對象的類型設(shè)置為URL類型。
                    //該圖像實體表示的是一個通過URL鏈接獲取的遠程圖像,而不是一個本地存儲的圖像。
                    simage.setType(ImageEntity.URL);
//                    ByteArrayOutputStream out = new ByteArrayOutputStream();
//                    simage.setData(out.toByteArray()); //字節(jié)流讀取
                    //將圖片添加進去
                    alarm.put("img", simage);
                    //alarms是一個里面元素都是map的list集合
                    alarms.add(alarm);
                    order = order + 1;
                }

                //Map集合params,將jobs(元素為map的list集合添加進去)
                params.put("alarms", alarms);
                //定義了一個表示模板文件夾路徑的字符串變量temDir,用于存儲模板文件所在的文件夾的路徑。
                // 在這個例子中,temDir指向E:/template/file/word/路徑。表示文件路徑分隔符,可以是\或者/,具體取決于操作系統(tǒng)
                String temDir="E:/template/" + File.separator + "file/word/"; ;//生成臨時文件存放地址
                //生成文件名
                Long time = new Date().getTime();
                // 生成的word格式
                String formatSuffix = ".docx";
                // 拼接后的文件名
                String fileName = time + formatSuffix;//文件名  帶后綴
                //導(dǎo)出word
                WordUtil.exportWord(templatePath, temDir, fileName, params, request, response);
//                WordUtil.exportWord(templatePath, PATH, fileName, params, request, response);
                code = 1;
            }else{
                msg = "token無效";
            }
        }catch (Exception e){
            msg = "操作失敗";
        }
        return Result.success(code, msg,null);
    }

3.導(dǎo)出的效果

1.固定信息部分:

java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)

?2.循環(huán)表格和循環(huán)圖片部分?

java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)文章來源地址http://www.zghlxwxcb.cn/news/detail-434632.html

到了這里,關(guān)于java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • VUE使用docxtemplater導(dǎo)出word(帶圖片) 踩坑 表格循環(huán)空格 ,canvas.toDataURL圖片失真模糊問題

    VUE使用docxtemplater導(dǎo)出word(帶圖片) 踩坑 表格循環(huán)空格 ,canvas.toDataURL圖片失真模糊問題

    參考:https://www.codetd.com/article/15219743 安裝 關(guān)鍵代碼JS部分 導(dǎo)出函數(shù) vue 中引入上述js文件和方法 模板內(nèi)容 自己準(zhǔn)備一個docx文檔,然后里面標(biāo)注好需替換的參數(shù) 列表循環(huán)-- {#list}{name}{/list} 單個參數(shù)–{} 圖片–{%imgUrl} 大概就這些,我也是從參考鏈接里看到的,至此基本能解決

    2024年02月15日
    瀏覽(29)
  • java實現(xiàn)word導(dǎo)入導(dǎo)出富文本(含圖片)-附完整測試用例

    java實現(xiàn)word導(dǎo)入導(dǎo)出富文本(含圖片)-附完整測試用例

    1、解決富文本導(dǎo)入導(dǎo)出依賴兼容問題 2、處理富文本和非富文本內(nèi)容 3、解決webp格式通過java下載不了問題,如果要用到富文本導(dǎo)出,將來勢必是會碰到的bug,這里提前給提出來并解決,測試用例中有給圖片測試。 4、在原有方法上優(yōu)化,比如處理等比縮小圖片、將圖片本地路

    2024年02月03日
    瀏覽(26)
  • SpringBoot整合Easyexcel實現(xiàn)將數(shù)據(jù)導(dǎo)出為Excel表格的功能

    SpringBoot整合Easyexcel實現(xiàn)將數(shù)據(jù)導(dǎo)出為Excel表格的功能

    本文主要介紹基于SpringBoot +MyBatis-Plus+Easyexcel+Vue實現(xiàn)缺陷跟蹤系統(tǒng)中導(dǎo)出缺陷數(shù)據(jù)的功能,實現(xiàn)效果如下圖: EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具。他能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能。 本文

    2024年02月14日
    瀏覽(31)
  • Python 在Word中創(chuàng)建表格并填入數(shù)據(jù)、圖片

    Python 在Word中創(chuàng)建表格并填入數(shù)據(jù)、圖片

    在Word中,表格是一個強大的工具,它可以幫助你更好地組織、呈現(xiàn)和分析信息。本文將介紹如何使用Python在Word中創(chuàng)建表格并填入數(shù)據(jù)、圖片,以及設(shè)置表格樣式等。 Python Word庫: 要使用Python在Word中創(chuàng)建或操作表格,需要先將Spire.Doc for Python這個第三方庫安裝到項目中. ? 以

    2024年03月11日
    瀏覽(15)
  • JAVA之利用easypoi將word模板導(dǎo)出為pdf(可帶圖片)

    JAVA之利用easypoi將word模板導(dǎo)出為pdf(可帶圖片)

    EasyPoi是一款基于POI的Java快速導(dǎo)出/導(dǎo)入Excel工具。它在POI的基礎(chǔ)上進行了封裝,提供了更加簡潔易用的API,使得生成Excel文件更加容易和高效。 使用EasyPoi可以輕松地生成Excel文件,并支持多種格式,如xlsx、xls、csv等。同時,EasyPoi也支持讀取Excel文件,可以方便地獲取其中的數(shù)

    2024年02月08日
    瀏覽(29)
  • JAVA實現(xiàn)向Word模板中插入Base64圖片和數(shù)據(jù)信息

    JAVA實現(xiàn)向Word模板中插入Base64圖片和數(shù)據(jù)信息

    在服務(wù)端提前準(zhǔn)備好Word模板文件,并在用戶請求接口時服務(wù)端動態(tài)獲取圖片。數(shù)據(jù)等信息插入到模板當(dāng)中,然后返回包含數(shù)據(jù)信息的Word文件流。 在需要插入圖片的地方使用:{{@參數(shù)名}},文本信息使用:{{參數(shù)名}},進行占位,占位格式將會被保留,經(jīng)過處理后格式不變 將準(zhǔn)

    2024年01月19日
    瀏覽(24)
  • 【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn)

    【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn)

    人不走空 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? 目錄 ? ????????個人主頁:人不走空?????? ??系列專欄:算法專題 ?詩詞歌賦:斯是陋室,惟吾德馨 前言 1.異步處理 1.1 使用job 1.2 使用mq 2.使用easyexcel 3.分頁查詢 4.多個she

    2024年02月20日
    瀏覽(26)
  • 封裝圖片處理工具類,實現(xiàn)圖片的裁剪、壓縮、圖片水印、文字水印、多行文字水印等功能

    封裝圖片處理工具類,實現(xiàn)圖片的裁剪、壓縮、圖片水印、文字水印、多行文字水印等功能

    目錄 一、前言 二、工具類的依賴和簡單介紹 1、添加依賴 2、簡單的使用 3、加載需要處理的圖片 4、添加圖片處理規(guī)則 4.1 Builder的方式 4.2 使用規(guī)則工廠的方式 5、輸出處理后的圖片 三、使用方式 1、圖片裁剪 圖片裁剪規(guī)則實體類 1.1 按長寬裁剪 1.1.1 示例代碼 1.1.2 實現(xiàn)效果

    2024年02月13日
    瀏覽(26)
  • easypoi 導(dǎo)出word表格

    template.docx 模板內(nèi)容: {{0}} {{1}} {{2}} {{3}} {{4}} {{5}} 學(xué)生姓名 學(xué)生年齡 學(xué)生生日 語文成績 數(shù)學(xué)成績 template_job.docx 模板內(nèi)容: 名稱 年齡 地址 名稱2 {{user.name}} {{user.age}} {{user.address}} {{user.other}} 公司名稱 地址 {{$fe:jobs t.name t.address}}

    2024年02月13日
    瀏覽(32)
  • ChatGPT | 分割Word文字及表格,優(yōu)化文本分析

    ChatGPT | 分割Word文字及表格,優(yōu)化文本分析

    知識庫讀取Word內(nèi)容時,由于embedding切片操作,可能會出現(xiàn)表格被分割成多個切片的情況。這種切片方式可能導(dǎo)致“列名欄”和“內(nèi)容欄”之間的Y軸關(guān)系鏈斷裂,從而無法準(zhǔn)確地確定每一列的數(shù)據(jù)對應(yīng)關(guān)系,從而使得無法準(zhǔn)確知道每一列的數(shù)據(jù)匯總。 用下面表格為例子: 級數(shù)

    2024年02月15日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包