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

java按照模板導(dǎo)出pdf或者word

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

一、java按照模板導(dǎo)出pdf

(一)制作模板

?1、在word里制作模板

????????因?yàn)镻DF常用的軟件不支持編輯,所以先用Word工具,如WPS或者Office新建一個(gè)空白Word文檔,里面制作出自己想要的樣式。

java根據(jù)模板生成pdf,pdf,word

2、 將Word轉(zhuǎn)換成PDF形式

?????????將設(shè)置好的Word文檔轉(zhuǎn)換成PDF形式,保存起來(lái)。

java根據(jù)模板生成pdf,pdf,word

3、編輯PDF準(zhǔn)備表單?

????????用Adobe Acrobat DC 軟件打開(kāi)保存好的PDF模板文件,點(diǎn)擊右側(cè)的準(zhǔn)備表單按鈕

java根據(jù)模板生成pdf,pdf,word

java根據(jù)模板生成pdf,pdf,word

????????接下來(lái)進(jìn)行數(shù)據(jù)源配置,在要顯示圖像的區(qū)域,點(diǎn)擊鼠標(biāo)右鍵,選擇文本域,設(shè)定好圖像的顯示位置,并指定數(shù)據(jù)源字段。需要注意的是,配置的數(shù)據(jù)源字段必須與Java中的實(shí)體類對(duì)象的字段名保持一致。

java根據(jù)模板生成pdf,pdf,word

?????????配置完成之后保存pdf文件,留作模板使用。

java根據(jù)模板生成pdf,pdf,word

(二)java代碼編寫(xiě)

1、導(dǎo)入依賴?

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13</version>
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>

2、實(shí)體類

import lombok.Data;
/**
 * 報(bào)表實(shí)體類
 */
@Data
public class MsaBusinessVO {
    /**接收業(yè)務(wù)總次數(shù)*/
    private String total;
    /**接收業(yè)務(wù)總次數(shù)(去年同期)*/
    private String lastToatl;
    /**處理次數(shù)*/
    private String dealNum;
    /**處理次數(shù)(去年同期)*/
    private String lastDealNum;
    /**已完成次數(shù)*/
    private String completeNum;
    /**已完成次數(shù)(去年同期)*/
    private String lastCompleteNum;
    /**售后次數(shù)*/
    private String afterSales;
    /**售后次數(shù)(去年同期)*/
    private String lastAfterSales;
}

3、service層代碼實(shí)現(xiàn)

/**
  * 生成報(bào)表
  * @param id
  * @param response
  */
void generateMsaBusiness(String id,HttpServletResponse response) throws UnsupportedEncodingException;
@Override
public void generateMsaBusiness(String id,HttpServletResponse response) throws UnsupportedEncodingException {
    //通過(guò)id獲取msaBusinessVO
    MsaBusinessVO msaBusinessVO = msaBusinessDao.getMsaBusinessInfo(id);
    // 模板名稱
    String templateName = "msaBusiness.pdf";
    String path = "/static/template/";
    //String path = "";
    // 獲取操作系統(tǒng)名稱,根據(jù)系統(tǒng)名稱確定模板存放的路徑
    /*String systemName = System.getProperty("os.name");
    if(systemName.toUpperCase().startsWith("WIN")){
        path = "D:/pdf/";
    }else {
        path = "/usr/local/pdf/";
    }*/
    // 生成導(dǎo)出PDF的文件名稱
    String fileName = "海事行政執(zhí)法業(yè)務(wù)數(shù)據(jù)統(tǒng)計(jì)"+msaBusinessVO.getStartDate()+"至"+msaBusinessVO.getEndDate()+".pdf";
    fileName = URLEncoder.encode(fileName, "UTF-8");
    // 設(shè)置響應(yīng)頭
    response.setContentType("application/force-download");
    response.setHeader("Content-Disposition",
            "attachment;fileName=" + fileName);
    OutputStream out = null;
    ByteArrayOutputStream bos = null;
    PdfStamper stamper = null;
    PdfReader reader = null;
    try {
        // 保存到本地
        // out = new FileOutputStream(fileName);
        // 輸出到瀏覽器端
        out = response.getOutputStream();
        // 讀取PDF模板表單
        reader = new PdfReader(path + templateName);
        // 字節(jié)數(shù)組流,用來(lái)緩存文件流
        bos = new ByteArrayOutputStream();
        // 根據(jù)模板表單生成一個(gè)新的PDF
        stamper = new PdfStamper(reader, bos);
        // 獲取新生成的PDF表單
        AcroFields form = stamper.getAcroFields();
        // 給表單生成中文字體,這里采用系統(tǒng)字體,不設(shè)置的話,中文顯示會(huì)有問(wèn)題
        //BaseFont font = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        BaseFont bf = BaseFont.createFont("/static/fonts/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        form.addSubstitutionFont(bf);
        // 裝配數(shù)據(jù)
        this.setMsaBusinessToForm(form, msaBusinessVO);
        // 表明該P(yáng)DF不可修改
        stamper.setFormFlattening(true);
        // 關(guān)閉資源
        stamper.close();
        // 將ByteArray字節(jié)數(shù)組中的流輸出到out中(即輸出到瀏覽器)
        Document doc = new Document();
        PdfCopy copy = new PdfCopy(doc, out);
        doc.open();
        //改成這樣就不會(huì)只顯示一頁(yè)了。
        PdfImportedPage importPage = null;
        ///循環(huán)是處理成品只顯示一頁(yè)的問(wèn)題
        for (int i=1;i<=reader.getNumberOfPages();i++){
            importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i);
            copy.addPage(importPage);
        }
        doc.close();
        log.info("*****************************PDF導(dǎo)出成功*********************************");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null) {
                out.flush();
                out.close();
            }
            if (reader != null) {
                reader.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


/**
 * 裝配數(shù)據(jù)
 * @param form
 * @param msaBusinessVO
 * @throws DocumentException
 * @throws IOException
 */
public void setMsaBusinessToForm(AcroFields form,MsaBusinessVO msaBusinessVO) throws DocumentException, IOException {    
    form.setField("total",msaBusinessVO.getTotal());//進(jìn)出港船舶總艘次
    form.setField("lastTotal",msaBusinessVO.getLastTotal());//進(jìn)出港船舶總艘次(去年同期)
    form.setField("dealNum",msaBusinessVO.getDealNum());//進(jìn)出港報(bào)告內(nèi)河船艘次
    form.setField("lastDealNum",msaBusinessVO.getLastDealNum());//進(jìn)出港報(bào)告內(nèi)河船艘次(去年同期)
    form.setField("completeNum",msaBusinessVO.getCompleteNum());//進(jìn)出港報(bào)告海船艘次
    form.setField("lastCompleteNum",msaBusinessVO.getLastCompleteNum());//進(jìn)出港報(bào)告海船艘次(去年同期)
    form.setField("afterSales",msaBusinessVO.getAfterSales());//進(jìn)出口岸查驗(yàn)船舶艘次
    form.setField("lastAfterSales",msaBusinessVO.getLastAfterSales());//進(jìn)出口岸查驗(yàn)船舶艘次(去年同期)
}

4、Controller層代碼實(shí)現(xiàn)

/**
 * 導(dǎo)出pdf
 * @param id
 * @param response
 */
@GetMapping("/generateMsaBusiness")
public void generateMsaBusiness(String id,HttpServletResponse response){
    try {
        msaBusinessService.generateMsaBusiness(id,response);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

二、java按照模板導(dǎo)出word

(一)制作模板

1、word模板文件處理,如下圖所示在word 文檔中填值的地方寫(xiě)入占位變量,值得注意的是,word中的占位變量要與java代碼中寫(xiě)入的元素名稱保持一致。

java根據(jù)模板生成pdf,pdf,word

?2、將word文檔另存為xml文件,編輯如下圖,找到填寫(xiě)的占位,修改為${total}格式

java根據(jù)模板生成pdf,pdf,word

java根據(jù)模板生成pdf,pdf,word?3、將文件后綴名改為.ftl文件 ,留作模板使用。

java根據(jù)模板生成pdf,pdf,word

?(二)java代碼編寫(xiě)

1、引入依賴

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.28</version>
    <scope>compile</scope>
</dependency>

2、service層代碼實(shí)現(xiàn)

/**
 * 導(dǎo)出word
 * @param param
 */
void exportSimpleWord(Map<String,Object> param);
/**
 * 保存打印記錄
 * @param param  
 * Map<String,Object> param 中的字段要與模板中的占位符名稱一致
 */
@Override
@Transactional(rollbackFor = Exception.class)
public void exportSimpleWord(Map<String,Object> param){    
    //param.put("total",total);
    //param.put("lastTotal",lastTotal);         
    try {
        // 要填充的數(shù)據(jù) dataMap, 注意map的key要和word中${xxx}的xxx一致
        //Configuration用于讀取ftl文件
        Configuration configuration = new freemarker.template.Configuration(Configuration.VERSION_2_3_23);
        System.out.println(configuration.getVersion());
        configuration.setDefaultEncoding("utf-8");
        //指定路徑的第一種方式(根據(jù)某個(gè)類的相對(duì)路徑指定)
        configuration.setClassForTemplateLoading(this.getClass(), "/static/template/");
        // 輸出文檔路徑及名稱
        File outFile = new File("D:/附件"+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".doc");
        //以u(píng)tf-8的編碼讀取ftl文件  名字要正確,最好不要放在本地,可能會(huì)出現(xiàn)找不到。
        Template t1 = configuration.getTemplate("unpackCheck.ftl", "utf-8");
        // Template t =  configuration.getTemplate("a.ftl","utf-8");
        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
        t1.process(param, out);
        out.close();
    }catch (IOException e) {
        e.printStackTrace();
    } catch (TemplateException e) {
        e.printStackTrace();
    }
}

3、Controller層代碼實(shí)現(xiàn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-738447.html

@PostMapping("/exportSimpleWord")
public void exportSimpleWord(@RequestBody Map<String,Object> param) {
    dangerCompareService.exportSimpleWord(param);
}

到了這里,關(guān)于java按照模板導(dǎo)出pdf或者word的文章就介紹完了。如果您還想了解更多內(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】itext 實(shí)現(xiàn) html根據(jù)模板生成pdf 中文不顯示/圖片不顯示問(wèn)題解決

    【Java】itext 實(shí)現(xiàn) html根據(jù)模板生成pdf 中文不顯示/圖片不顯示問(wèn)題解決

    工作中需要使用生成pdf記錄,選取使用的是itext 生成 pdf方式。分享下實(shí)現(xiàn)方式及遇到的問(wèn)題。 這里隨便找個(gè)html課程表作為示例,添加了幾張圖片為了展示圖片轉(zhuǎn)pdf功能。 一:引入jar包 二:導(dǎo)入ftl文件 這塊使用的是html語(yǔ)法,將文件后綴名改為ftl即可,在需要參數(shù)的地方通過(guò)

    2024年02月05日
    瀏覽(24)
  • Springboot -- 按照模板生成docx、pdf文件,docx轉(zhuǎn)pdf格式

    Springboot -- 按照模板生成docx、pdf文件,docx轉(zhuǎn)pdf格式

    使用 poi-tl 根據(jù)模板生成 word 文件。 使用 xdocreport 將 docx 文件轉(zhuǎn)換為 pdf 文件。 xdocreport 也支持根據(jù)模板導(dǎo)出 word ,但是 poi-tl 的功能更齊全,操作更簡(jiǎn)單,文檔清晰。 poi-tl 、xdocreport 內(nèi)部均依賴了 poi ,要注意兩者中 poi 和 自身項(xiàng)目引用的 poi 的版本是否存在沖突。 使用 p

    2024年02月15日
    瀏覽(19)
  • nodejs根據(jù)pdf模板填入中文數(shù)據(jù)并生成新的pdf文件

    首先 const templateBytes = await fs.promises.readFile(templatePath); ? const pdfDoc = await PDFDocument.load(templateBytes); ? const form = pdfDoc.getForm(); 這三行表示讀文件,并且讀取pdf表單,然后注冊(cè)fontkit,將你要的字體嵌入pdf中,之后在pdf的表單中尋找字段,填入字段,并把字體樣式更新為你嵌入pd

    2024年02月10日
    瀏覽(28)
  • java根據(jù)模板導(dǎo)出word

    java根據(jù)模板導(dǎo)出word

    日常開(kāi)發(fā)中,常常會(huì)遇到各種各樣的表格進(jìn)行導(dǎo)出,比較好的辦法就是提前弄好word模版,再通過(guò)遍歷的方式進(jìn)行導(dǎo)出文檔 模版編寫(xiě) 內(nèi)容替換 目標(biāo)下面模版進(jìn)行多頁(yè)展示 將word轉(zhuǎn)換成xml 將xml格式化 再將xml改成ftl xml格式化地址 list找到起始位置和結(jié)束位置 起始位置插入#list

    2024年02月15日
    瀏覽(29)
  • java根據(jù)excel模板進(jìn)行導(dǎo)出數(shù)據(jù)

    java根據(jù)excel模板進(jìn)行導(dǎo)出數(shù)據(jù)

    ?一、pom文件添加以下依賴 二、添加util包 三、在resources目錄下添加template并添加xlsx模板 ?注意:xlsx模板使用${list.XXX}? ? ?XXX表示數(shù)據(jù)源list(map形式的list)的數(shù)據(jù)key值,如果list是對(duì)象形式的,那么就是該業(yè)務(wù)字段 ?四、業(yè)務(wù)層使用:

    2024年02月11日
    瀏覽(28)
  • java 導(dǎo)出word,java根據(jù)提供word模板導(dǎo)出word文檔

    java 導(dǎo)出word,java根據(jù)提供word模板導(dǎo)出word文檔

    本文主要講解,利用poi-tl在word中動(dòng)態(tài)生成表格行,進(jìn)行文字、圖片填充。一共提供了兩種方式,1.基于本地文件 2.基于網(wǎng)絡(luò)文件 本文講解思路,1.先看示例,2. 示例對(duì)應(yīng)的代碼展示 3. 基本概念講解(api自行查閱文檔)。 這樣便于快速展示,不符合你的業(yè)務(wù)需求的可以直接劃走

    2024年02月14日
    瀏覽(23)
  • 【PDFBox】PDFBox操作PDF文檔之讀取指定頁(yè)面文本內(nèi)容、讀取所有頁(yè)面文本內(nèi)容、根據(jù)模板文件生成PDF文檔

    【PDFBox】PDFBox操作PDF文檔之讀取指定頁(yè)面文本內(nèi)容、讀取所有頁(yè)面文本內(nèi)容、根據(jù)模板文件生成PDF文檔

    這篇文章,主要介紹PDFBox操作PDF文檔之讀取指定頁(yè)面文本內(nèi)容、讀取所有頁(yè)面文本內(nèi)容、根據(jù)模板文件生成PDF文檔。 目錄 一、PDFBox操作文本 1.1、讀取所有頁(yè)面文本內(nèi)容 1.2、讀取指定頁(yè)面文本內(nèi)容 1.3、寫(xiě)入文本內(nèi)容 1.4、替換文本內(nèi)容 (1)自定義PDTextStripper類 (2)創(chuàng)建Key

    2024年02月16日
    瀏覽(23)
  • Java導(dǎo)出PDF文檔(模板導(dǎo)出和自定義)

    Java導(dǎo)出PDF文檔(模板導(dǎo)出和自定義)

    需要導(dǎo)出PDF文檔,支持模板導(dǎo)出和自定義文檔格式。 PDF模板創(chuàng)建可使用表單域創(chuàng)建表單字段,引入數(shù)據(jù)填充,或者根據(jù)實(shí)際需要生成html轉(zhuǎn)換成pdf。 PDF模板可以考慮使用PDF編輯器編輯,創(chuàng)建表單域,配置好相應(yīng)字段 ? ? ?

    2024年02月16日
    瀏覽(31)
  • 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)單的示例代碼,可以幫助您快速入門(mén)。 模板制作:offer,wps都行,我使用wps進(jìn)行操作? 第一步制作模板 CTRL+f9生成域------》鼠標(biāo)右鍵編輯域------》選

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

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

    2024年02月21日
    瀏覽(35)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包