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

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

這篇具有很好參考價值的文章主要介紹了JAVA實現(xiàn)向Word模板中插入Base64圖片和數(shù)據(jù)信息。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

需求

在服務(wù)端提前準備好Word模板文件,并在用戶請求接口時服務(wù)端動態(tài)獲取圖片。數(shù)據(jù)等信息插入到模板當(dāng)中,然后返回包含數(shù)據(jù)信息的Word文件流。

一、準備模板文件

在需要插入圖片的地方使用:{{@參數(shù)名}},文本信息使用:{{參數(shù)名}},進行占位,占位格式將會被保留,經(jīng)過處理后格式不變

JAVA實現(xiàn)向Word模板中插入Base64圖片和數(shù)據(jù)信息,Java開發(fā),java,開發(fā)語言,Word文件下載

將準備好的模板文件放在resources目錄下

JAVA實現(xiàn)向Word模板中插入Base64圖片和數(shù)據(jù)信息,Java開發(fā),java,開發(fā)語言,Word文件下載

二、引入Poi-tl、Apache POI依賴

poi-tl(poi template language)是Word模板引擎,基于Apache POI,提供更友好的API,使用起來更加簡單
版本對應(yīng)關(guān)系參考Poi-tl官網(wǎng)

<!--    替換自己使用的版本    -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>4.1.*</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>4.1.*</version>
</dependency>
<!--    Word模板引擎    -->
<dependency>
	<groupId>com.deepoove</groupId>
	<artifactId>poi-tl</artifactId>
	<version>1.7.*</version>
</dependency>

三、創(chuàng)建實體類(用于保存向Word中寫入的數(shù)據(jù))

參數(shù)名必須同Word模板中的參數(shù)名稱保持一致文章來源地址http://www.zghlxwxcb.cn/news/detail-804316.html

import com.deepoove.poi.data.PictureRenderData;

@Data
public class DownloadDate {
    //圖片使用PictureRenderData類型
    private PictureRenderData image;
    
    private String name;

    private String a;

    private String b;

    private String c;

    private String d;

    private String e;

    private String f;

    private String g;

    private String h;
    
    private String i;
}

四、實現(xiàn)Service接口

public interface DownloadService {
     void download(HttpServletResponse response, DownloadDTO downloadDTO) throws IOException;
}

@Service
@Slf4j
public class DownloadServiceImpl implements DownloadService {

    @Resource
    //遠程調(diào)用服務(wù)
    private FeignService feignService;
    
    @Override
    public void download(HttpServletResponse response, DownloadDTO downloadDTO) throws IOException {BufferedImage、字節(jié)數(shù)組),Base64可以轉(zhuǎn)字節(jié)數(shù)組后使用
    	//通過調(diào)用其它接口獲取待寫入的數(shù)據(jù)信息
    	WordData wordData = feignService.getData(downloadDTO);
        /** 
        * 圖片可以是多種格式------------------------
        * 圖片路徑:PictureRenderData(int width, int height, String path)
        * File:PictureRenderData(int width, int height, File picture)
        * InputStream:PictureRenderData(int width, int height, String format, InputStream input)
        * BufferedImage:PictureRenderData(int width, int height, String format, BufferedImage image)
        * 字節(jié)數(shù)組:PictureRenderData(int width, int height, String format, byte[] data)
        * Base64可以轉(zhuǎn)字節(jié)數(shù)組后使用
        */

        //以Base64為例,先獲取圖片的Base64編碼(wordData.getImg是原始圖片Base64數(shù)據(jù))
        String base64ImageData = wordData.getImg.substring(data.indexOf(",") + 1);
        //獲取圖片類型
        String format = getBase64Type(base64ImageData);
        // 將base64數(shù)據(jù)轉(zhuǎn)為字節(jié)數(shù)組
        byte[] imageBytes = Base64.getDecoder().decode(base64ImageData);
        // 將字節(jié)數(shù)組包裝成PictureRenderData
        PictureRenderData pictureRenderData = new PictureRenderData(690,530,format,imageBytes);
        //待寫入Word的數(shù)據(jù)
        DownloadDate downloadDate = new DownloadDate();
        //圖片信息
        downloadDate.setImage(pictureRenderData);
        //其它信息
        downloadDate.setName(wordData.getName());
        //...
        XWPFTemplate template = null;
        BufferedOutputStream bufferedOutputStream = null;
        ServletOutputStream outputStream = null;
        try {
        	/** 
        	* 該方法會導(dǎo)致在部分環(huán)境中資源找不到的情況,不推薦使用
        	*/
            //獲得resource路徑+模板路徑
            //String path = Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource("")).getPath() + "word/template.docx";
            // 讀取Word模板
            //FileInputStream templateInputStream = new FileInputStream(path);
            // 模板綁定數(shù)據(jù)
            //template = XWPFTemplate.compile(templateInputStream).render(imageDownloadDate);
            
            // 從資源中加載Word模板
            try (InputStream templateInputStream = getClass().getClassLoader().getResourceAsStream("word/template.docx")) {
                if (templateInputStream != null) {
                    // 模板綁定數(shù)據(jù)
                    template = XWPFTemplate.compile(templateInputStream).render(imageDownloadDate);
                } else {
                    // 處理模板資源未找到的情況
                    log.error("Word模板資源未找到");
                    response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                    return;
                }
            }
            //文件名
            String encodedFileName = URLEncoder.encode(System.currentTimeMillis()+"", "utf-8");
            //設(shè)置響應(yīng)信息
            response.setHeader("Content-Disposition", "attachment;filename=" + encodedFileName + ".docx");
            response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
            response.setCharacterEncoding("utf-8");
            outputStream = response.getOutputStream();
            bufferedOutputStream = new BufferedOutputStream(outputStream);
            template.write(bufferedOutputStream);
            //清空流
            bufferedOutputStream.flush();
            outputStream.flush();
        } catch (Exception e) {
            log.info(e.getMessage());
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        } finally {
            //關(guān)閉資源
            PoitlIOUtils.closeQuietlyMulti(template, bufferedOutputStream, outputStream);
        }
    }
    
    //根據(jù)base64編碼獲取圖片格式信息
    private String getBase64Type(String base64) {
        byte[] b = Base64.getDecoder().decode(base64);
        String type = ".png";
        if (0x424D == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {
            type = ".bmp";
        } else if (0x8950 == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {
            type = ".png";
        } else if (0xFFD8 == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {
            type = ".jpg";
        } else if (0x49492A00 == ((b[0] & 0xff) << 24 | (b[1] & 0xff) << 16 | (b[2] & 0xff) << 8 | (b[3] & 0xff))) {
            type = ".tif";
        }
        return type;
    }

}

五、Controller層實現(xiàn)

@RestController
@RequestMapping("/test")
@Api(tags = "獲取商品圖片")
public class GetImageController {

    @Resource
    DownloadService downloadService;

    @PostMapping("/download")
    @ApiOperation(value = "下載Word")
    void download(HttpServletResponse response,@RequestBody DownloadDTO downloadDTO) throws IOException {
        //鑒權(quán)或其它處理
        //....
        downloadService.download(response,downloadDTO);
    }
    
}

到了這里,關(guān)于JAVA實現(xiàn)向Word模板中插入Base64圖片和數(shù)據(jù)信息的文章就介紹完了。如果您還想了解更多內(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)文章

  • java base64轉(zhuǎn)圖片

    java base64轉(zhuǎn)圖片

    方法 : 傳入文件路徑和base64位的編碼 main方法 結(jié)果

    2024年02月13日
    瀏覽(18)
  • Java - 將base64編碼解碼成圖片

    Java - 將base64編碼解碼成圖片

    為了方便測試,我們可以使用一個圖片編碼網(wǎng)站,將圖片進行base64編碼 解密的代碼如下 因為圖片的Base64字符串非常大,動輒幾百K,所以不能直接使用 String base64 = \\\"${該圖片的base64串}\\\" 進行測試,否則編譯器會報錯 Java \\\"constant string too long\\\" compile error\\\" 。這個錯誤的出現(xiàn),是因

    2023年04月09日
    瀏覽(28)
  • 前端實現(xiàn)圖片轉(zhuǎn)Base64

    前端實現(xiàn)圖片轉(zhuǎn)Base64

    廢話不多說,直接上代碼 我們傳入一個圖 片地址看看是否成功? 但是,一般我們在做這樣的需求前,處理的圖片肯定不止一張,接下來就要批量處理,但是這個方法是異步,我們要將一個數(shù)組內(nèi)的每個對象的地址都轉(zhuǎn)成base64,才算真正完成我們的功能。前端一般接收到后端的

    2024年02月05日
    瀏覽(31)
  • Java中實現(xiàn)圖片和Base64的互相轉(zhuǎn)化

    Java中實現(xiàn)圖片和Base64的互相轉(zhuǎn)化

    公司項目中用到了實名認證此,采用的第三方平臺。后端中用到的單項功能為身份證信息人像對比功能,在寫demo的過程中發(fā)現(xiàn),它們所要求的圖片信息為base64編碼格式。

    2024年02月14日
    瀏覽(26)
  • Java 圖片渲染到前端,向前端一次返回多張Base64圖片

    當(dāng)我們從服務(wù)器讀取的圖片鏈接返回給前端,前端可以很輕松的下載和展示,但是對于臨時文件,我們不需要保存到服務(wù)器,比如PPT轉(zhuǎn)圖片,PDF轉(zhuǎn)圖片等等,我們需要直接返回給前端,對于一張圖片可以使用flush()渲染到前端,多張圖片可以把圖片編碼成Base64,并存儲到數(shù)組中

    2024年02月09日
    瀏覽(26)
  • Java讀取外鏈圖片忽略ssl驗證轉(zhuǎn)為base64

    ? ? ? ? 最近在對接外部接口時遇到返回的圖片所在的服務(wù)器全都沒有ssl證書,導(dǎo)致在前端直接用img標簽展示時圖片開裂。于是轉(zhuǎn)為通過后端獲取,繞過ssl驗證之后轉(zhuǎn)為base64返回。記錄一下代碼段。

    2024年02月15日
    瀏覽(18)
  • java使用hutool把服務(wù)器圖片鏈接轉(zhuǎn)為base64編碼

    需求是把服務(wù)器的圖片鏈接或者網(wǎng)上的圖片鏈接地址轉(zhuǎn)為base64位編碼方便前端操作 base64編碼轉(zhuǎn)為圖片在線網(wǎng)址 https://imgtobase64.d777.com/ 1.1 引入依賴 1.2 代碼

    2024年02月12日
    瀏覽(20)
  • 圖片與Base64編碼相互轉(zhuǎn)換、優(yōu)勢分析和技術(shù)實現(xiàn)

    圖片與Base64編碼相互轉(zhuǎn)換、優(yōu)勢分析和技術(shù)實現(xiàn)

    在Web開發(fā)中,圖片與Base64編碼的相互轉(zhuǎn)換是一個非常實用的技能。圖片 Base64編碼是將圖片文件轉(zhuǎn)換為字符串格式,以便于在網(wǎng)絡(luò)上傳輸和存儲。本文將詳細介紹圖片與Base64編碼的轉(zhuǎn)換方法,以及圖片Base64編碼的優(yōu)勢。 圖片Base64相互轉(zhuǎn)換 | 一個覆蓋廣泛主題工具的高效在線平

    2024年01月19日
    瀏覽(31)
  • 前端FileReader對象實現(xiàn)圖片file文件轉(zhuǎn)base64

    前端FileReader對象實現(xiàn)圖片file文件轉(zhuǎn)base64

    1、file轉(zhuǎn)base64具體代碼 2、原理解析 ? 上面封裝的方法,其原理主要是借助 FileReader 對象來實現(xiàn)圖片格式的轉(zhuǎn)換, FileReader 對象中的 readAsDataURL() 方法,可以讀取一個 File 或 Blob 類型的文件,并將其轉(zhuǎn)換為base64格式的字符串。但要注意的一點是:我們通過 readAsDataURL() 方法去讀

    2023年04月09日
    瀏覽(33)
  • python 利用word中占位符號實現(xiàn)按word指定位置插入圖片

    from docx import Document from docx.shared import Inches from docx.oxml.ns import qn from docx.enum.text import WD_ALIGN_PARAGRAPH def center_insert_img(doc, img): ? ? \\\"\\\"\\\"插入圖片\\\"\\\"\\\" ? ? for paragraph in doc.paragraphs: ? ? ? ? # 根據(jù)文檔中的占位符定位圖片插入的位置 ? ? ? ? if \\\'img1\\\' in paragraph.text: ? ? ? ? ? ? # 把占

    2024年02月11日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包