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

接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?

這篇具有很好參考價(jià)值的文章主要介紹了接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Excel、PDF的導(dǎo)出、導(dǎo)入是我們工作中經(jīng)常遇到的一個問題,剛好今天公司業(yè)務(wù)遇到了這個問題,順便記個筆記以防下次遇到相同的問題而束手無策。

公司有這么兩個需求:

需求一、給了一個表單,讓把查出來的數(shù)據(jù)組裝到表單中并且提供以PDF格式的下載功能。

需求二、?將數(shù)據(jù)查出來以Excel表格的形式下載下來。

Java實(shí)現(xiàn)PDF的生成和數(shù)據(jù)動態(tài)插入、導(dǎo)出功能

1、第一步:PDF制作模板

因?yàn)镻DF常用的軟件不讓支持編輯,我們就先使用WPS以Word的形式進(jìn)行編輯制作出與客戶需求一樣的樣式,然后直接另存為 .pdf 的形式如下圖所示:

a.Word里面制作模板

接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?,springboot,spring,excel,pdf,java

b.更改名字為 .pdf形式

接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?,springboot,spring,excel,pdf,java

c.這時需要用到一個叫:Adobe Acrobat DC的軟件,具體操作如下:

用Adobe Acrobat DC打開我們剛才改過名字的PDF文件,點(diǎn)擊右下角的“更多工具”按鈕

接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?,springboot,spring,excel,pdf,java

到下面這個頁面再點(diǎn)擊“準(zhǔn)備表單”按鈕

接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?,springboot,spring,excel,pdf,java

d.接下來就需要詳細(xì)的配置你的數(shù)據(jù)源了

接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?,springboot,spring,excel,pdf,java

數(shù)據(jù)源即:你代碼中實(shí)體類中對應(yīng)的數(shù)據(jù)(注意字段一定要一一對應(yīng)),配置完畢就可以保存進(jìn)行下面的代碼編寫工作了

2、代碼的編寫

假定我們實(shí)體類什么的都已經(jīng)編寫完成、數(shù)據(jù)通過前端傳入獲取、模板位置在E盤根目錄下名字為:車輛維修審批單.pdf

導(dǎo)入jar包:

<!--?PDF導(dǎo)出-->
<!--?https://mvnrepository.com/artifact/com.itextpdf/itextpdf?-->
<dependency>
????<groupId>com.itextpdf</groupId>
????<artifactId>itextpdf</artifactId>
????<version>5.5.13</version>
</dependency>

實(shí)現(xiàn)生成PDF、數(shù)據(jù)插入、導(dǎo)出

@RegisterToSMP(serviceDisplay?=?"預(yù)覽頁面PDF下載")
@RequestMapping(value?=?"/DM/gwclwxsq/qygl/exportPDF$m=query.service",method?=RequestMethod.POST)
public?String?exportPdf(@RequestBody?GwclwxsqBean?gwclwxsqBean?,?HttpServletResponse?response)?throws?UnsupportedEncodingException?{
????//?1.指定解析器
????System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
????????????"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
????String?filename="車輛維修審批單.pdf";
????String?path="e:/";
????response.setContentType("application/pdf");
????response.setHeader("Content-Disposition",?"attachment;fileName="
????????????+?URLEncoder.encode(filename,?"UTF-8"));
????OutputStream?os?=?null;
????PdfStamper?ps?=?null;
????PdfReader?reader?=?null;
????try?{
????????os?=?response.getOutputStream();
????????//?2?讀入pdf表單
????????reader?=?new?PdfReader(path+?"/"+filename);
????????//?3?根據(jù)表單生成一個新的pdf
????????ps?=?new?PdfStamper(reader,?os);
????????//?4?獲取pdf表單
????????AcroFields?form?=?ps.getAcroFields();
????????// 5給表單添加中文字體?這里采用系統(tǒng)字體。不設(shè)置的話,中文可能無法顯示
????????BaseFont?bf?=?BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",
??????????????????????BaseFont.IDENTITY_H,?BaseFont.EMBEDDED);
????????form.addSubstitutionFont(bf);
????????//?6查詢數(shù)據(jù)================================================
????????Map<String,?String>?data?=?new?HashMap<String,?String>();
??????????????data.put("commitTime",?gwclwxsqBean.getCommitTime());
??????????????data.put("driver",?gwclwxsqBean.getDriver());
??????????????data.put("carId",?gwclwxsqBean.getCarId());
??????????????data.put("carType",?gwclwxsqBean.getCarType());
??????????????data.put("repairAddress",?gwclwxsqBean.getRepairAddress());
??????????????data.put("repairCost",gwclwxsqBean.getRepairCost());
??????????????data.put("project",?gwclwxsqBean.getProject());
??????????????data.put("fwbzzxfzrYj",?gwclwxsqBean.getFwbzzxfzrYj());
??????????????data.put("fgldspYj",?gwclwxsqBean.getFgldspYj());
??????????????data.put("remarks",?gwclwxsqBean.getRemarks());
?????????//?7遍歷data?給pdf表單表格賦值
????????for?(String?key?:?data.keySet())?{
????????????form.setField(key,data.get(key).toString());
????????}
????????ps.setFormFlattening(true);
????????log.info("*******************PDF導(dǎo)出成功***********************");
????}?catch?(Exception?e)?{??????????log.error("*******************PDF導(dǎo)出失敗***********************");
????????e.printStackTrace();
????}?finally?{
????????try?{
????????????ps.close();
????????????reader.close();
????????????os.close();
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????}
????return?null;
}

3、測試

接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?,springboot,spring,excel,pdf,java

接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?,springboot,spring,excel,pdf,java

三、Java實(shí)現(xiàn)Excel生成和數(shù)據(jù)插入、導(dǎo)出

這個比較簡單,直接上代碼(假定你的實(shí)體類、查詢什么的都已經(jīng)寫好)注意:實(shí)體類一個是你自己的數(shù)據(jù)實(shí)體類還有一個是你導(dǎo)出時表格中對應(yīng)的實(shí)體類。

我們以一個真實(shí)的公司業(yè)務(wù)來舉個例子(一個統(tǒng)計(jì)疫情登記人員信息的Excel導(dǎo)出功能)

a.表頭對應(yīng)實(shí)體類ExportYqfkdj.java

import?lombok.Data;

/**
?*?description:
?*?@author:?woniu
?*?@version:?V1.0.0
?*?@date:?2024年1月14日?下午3:05:54
?*/
@Data
public?class?ExportYqfkdj?{
????/**
?????*?序號
?????*/
????private?Integer?xuhao;
????/**
?????*?姓名
?????*/
????private?String?xingming;
????/**
?????*?證件號碼
?????*/
????private?String?zjhm;
????/**
?????*?聯(lián)系電話
?????*/
????private?String?lxdh;
????/**
?????*?申請人工作單位
?????*/
????private?String?sqrGzdw;
????/**
?????*?是否接觸過疑似病例
?????*/
????private?String?sfjcgysbl;
????/**
?????*?當(dāng)前是否與居家隔離人員同住
?????*/
????private?String?sfyjjglrytz;
????/**
?????*?當(dāng)前狀態(tài)
?????*/
????private?String?dqzt;
????/**
?????*?當(dāng)前健康狀態(tài)
?????*/
????private?String?dqjkzt;

????/**
?????*?當(dāng)前體溫
?????*/
????private?String?dqtw;
????/**
?????*?當(dāng)前所在地址
?????*/
????private?String?dqszdz;
????/**
?????*?當(dāng)前居住地址
?????*/
????private?String?dqjzdz;
????/**
?????*?提交時間
?????*?*/
????private?String?tjsj;
}

b.Service層

/**
?*?導(dǎo)出
?*?@param?yqfkdjBean
?*?@author?woniu
?*?@return
?*?@throws?Exception
?*/
@Transactional(rollbackFor?=?{?Exception.class?})
public?DataResult?exporYqfkdj(YqfkdjBean?yqfkdjBean)?throws?Exception?{
????DataResult?result?=?new?DataResult();
????List<ExportYqfkdj>?list?=?new?ArrayList<ExportYqfkdj>();
????try?{
????????/*?查詢導(dǎo)出信息?*/
????????result?=?getYqfkMhCXQuery(yqfkdjBean);
????????SimpleDateFormat?df?=?new?SimpleDateFormat("yyyyMMddhhmmssSSS");
????????for?(int?i?=?0;?i?<?result.getTotalcount();?i++)?{
????????????ExportYqfkdj?dmKhfwdcDtjlZxDto?=?new?ExportYqfkdj();
????????????dmKhfwdcDtjlZxDto?=?ObjectUtil.parsePojo(result.getResults().get(i),?ExportYqfkdj.class);
????????????dmKhfwdcDtjlZxDto.setXuhao(i?+?1);
????????????list.add(dmKhfwdcDtjlZxDto);
????????}
????????String?filepath?=?"D:/疫情防控信息"?+?df.format(new?Date())?+?".xlsx";
????????if?(System.getProperty(YqfkdjUtils.Wjdz.NAME).toLowerCase().startsWith(YqfkdjUtils.Wjdz.LI)
????????????????||?System.getProperty(YqfkdjUtils.Wjdz.NAME).toLowerCase().startsWith(YqfkdjUtils.Wjdz.LIN))?{
????????????filepath?=?"/home/Tomcat/temp/"?+?df.format(new?Date())?+?".xlsx";
????????}
????????EasyExcel.write(filepath,?ExportYqfkdj.class).head(head()).sheet().doWrite(list);
????????result.setResults(list);
????????result.setSuccess(true);
????????result.setMsg(filepath);
????}?catch?(Exception?e)?{
????????result.setSuccess(false);
????????result.setMsg(YqfkdjUtils.Cytx.DCSB);
????????e.printStackTrace();
????????throw?e;
????}
????return?result;
}
/**
?*?疫情防控信息導(dǎo)出表頭
?*?@author?woniu
?*?@return?List<List<String>>
?*/
private?List<List<String>>?head()?{
????List<List<String>>?list?=?new?ArrayList<List<String>>();
????List<String>?head0?=?new?ArrayList<String>();
????head0.add("序號");
????List<String>?head1?=?new?ArrayList<String>();
????head1.add("姓名");
????List<String>?head2?=?new?ArrayList<String>();
????head2.add("證件號碼");
????List<String>?head3?=?new?ArrayList<String>();
????head3.add("聯(lián)系電話");
????List<String>?head4?=?new?ArrayList<String>();
????head4.add("工作所在單位");
????List<String>?head5?=?new?ArrayList<String>();
????head5.add("是否接觸疑似病例");
????List<String>?head6?=?new?ArrayList<String>();
????head6.add("是否與隔離人員同住");
????List<String>?head7?=?new?ArrayList<String>();
????head7.add("當(dāng)前狀態(tài)");
????List<String>?head8?=?new?ArrayList<String>();
????head8.add("當(dāng)前健康狀態(tài)");
????List<String>?head9?=?new?ArrayList<String>();
????head9.add("體溫(°C)");
????List<String>?head10?=?new?ArrayList<String>();
????head10.add("當(dāng)前所在地址");
????List<String>?head11?=?new?ArrayList<String>();
????head11.add("當(dāng)前居住地址");
????List<String>?head12?=?new?ArrayList<String>();
????head12.add("提交時間");
????list.add(head0);
????list.add(head1);
????list.add(head2);
????list.add(head3);
????list.add(head4);
????list.add(head5);
????list.add(head6);
????list.add(head7);
????list.add(head8);
????list.add(head9);
????list.add(head10);
????list.add(head11);
????list.add(head12);
????return?list;
}

c.Controller層

@RegisterToSMP(serviceDisplay?=?"疫情防控查詢導(dǎo)出")
@RequestMapping(value?=?"/DM/yqfkdj/gr/yqfkdjdc$m=export.service",?method?=?RequestMethod.POST)
public?void?exportKhfxxx(@RequestBody?YqfkdjBean?yqfkdjBean,?HttpServletResponse?resp)?throws?Exception?{
????DataResult?result?=?new?DataResult();
????try?{
????????SimpleDateFormat?df?=?new?SimpleDateFormat("yyyyMMddhhmmssSSS");
????????result?=?yqfkdjService.exporYqfkdj(yqfkdjBean);
????????String?filepath?=?result.getMsg().replace("\"",?"");
????????File?file?=?new?File(filepath);
????????String?filename?=?"疫情防控信息"?+?df.format(new?Date())?+?".xlsx";
????????InputStream?fis?=?new?BufferedInputStream(new?FileInputStream(filepath));
????????byte[]?buffer?=?new?byte[fis.available()];
????????fis.read(buffer);
????????fis.close();
????????resp.reset();
????????resp.setHeader("Content-Disposition",
????????????????"attachment;filename="?+?new?String(filename.replaceAll("?",?"").getBytes("gbk")));
????????resp.setHeader("Content-Length",?""?+?file.length());
????????OutputStream?os?=?new?BufferedOutputStream(resp.getOutputStream());
????????resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
????????//?輸出文件
????????os.write(buffer);
????????os.flush();
????????os.close();
????}?catch?(Exception?e)?{
????????e.printStackTrace();
????????log.info(YqfkdjUtils.Cytx.DCSB);
????????throw?e;
????}
}

測試

接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?,springboot,spring,excel,pdf,java

已經(jīng)全部完成PDF和Excel的生成、插入、導(dǎo)出功能。

最后說一句(求關(guān)注!別白嫖!)

如果這篇文章對您有所幫助,或者有所啟發(fā)的話,求一鍵三連:點(diǎn)贊、轉(zhuǎn)發(fā)、在看。

關(guān)注公眾號:woniuxgg,在公眾號中回復(fù):筆記??就可以獲得蝸牛為你精心準(zhǔn)備的java實(shí)戰(zhàn)語雀筆記,回復(fù)面試、開發(fā)手冊、有超贊的粉絲福利!文章來源地址http://www.zghlxwxcb.cn/news/detail-828191.html

到了這里,關(guān)于接了個變態(tài)需求:生成 Excel + PDF 導(dǎo)出,用 Java 怎么實(shí)現(xiàn)?的文章就介紹完了。如果您還想了解更多內(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)文章

  • java中使用POI生成Excel并導(dǎo)出

    java中使用POI生成Excel并導(dǎo)出

    注:本文章中代碼均為本地Demo版本,若后續(xù)代碼更新將不會更新文章 根據(jù)從數(shù)據(jù)庫查詢出的數(shù)據(jù),將其寫入excel表并導(dǎo)出 我的想法是通過在實(shí)體屬性上寫自定義注解的方式去完成。因?yàn)槲覀冊诖a中可以通過反射的方式去獲取實(shí)體類中全部的注解及屬性名稱等等。我們可以

    2024年02月16日
    瀏覽(26)
  • 【Java】使用 HSSFWorkbook 生成 Excel 并導(dǎo)出步驟

    1、含義:excel的工作簿 2、創(chuàng)建工作簿 3、創(chuàng)建 excel 的工作表 4、創(chuàng)建單元格樣式 1、含義:excel 的工作表 2、創(chuàng)建行(第一行從 0 開始) 3、設(shè)置單元格寬度 1、含義:單元格樣式 2、屬性設(shè)置 1、含義:excel 的行 2、創(chuàng)建行對應(yīng)的單元格(第一個單元格從 0 開始) 3、屬性設(shè)置

    2024年02月03日
    瀏覽(33)
  • Java 導(dǎo)出Excel表格生成下拉框-EasyExcel
  • java JFreeChart 繪制各種圖形 并使用itextPdf生成PDF導(dǎo)出

    參考: https://blog.csdn.net/hfy1237/article/details/126693786 https://blog.csdn.net/qq_39149275/article/details/119381389

    2024年01月19日
    瀏覽(25)
  • 功能需求-根據(jù)頁面生成pdf,pdf不需要下載只需把文件流上傳到服務(wù)器

    根據(jù)自身當(dāng)下技術(shù)的水平和實(shí)際情況,做一個簡單的記錄。 在項(xiàng)目中有采購合同和銷售合同,這些合同新建好之后都需要有人去審核,審核通過后需要把合同生成一個pdf文件然后后端給保存起來 在項(xiàng)目中有采購合同和銷售合同,這些合同新建好之后都需要有人去審核,審核

    2024年02月13日
    瀏覽(30)
  • jquery中pdf的上傳、下載及excel導(dǎo)出

    參考: https://blog.csdn.net/qq_27179087/article/details/129204759 https://blog.csdn.net/weixin_46186815/article/details/131514151?spm=1001.2101.3001.6650.1utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-131514151-blog-123522384.235%5Ev38%5Epc_relevant_anti_vip_basedepth_1-utm_source=distribute.pc_relevant.none-task-blog-2%

    2024年02月11日
    瀏覽(23)
  • 使用aspose相關(guān)包將excel轉(zhuǎn)成pdf 并導(dǎo)出

    使用aspose相關(guān)包將excel轉(zhuǎn)成pdf 并導(dǎo)出

    1、依賴的jar包 , jar獲取鏈接 aspose相關(guān)三方j(luò)ar ,下載解壓后,在項(xiàng)目路徑下建一個libs包,然后將下圖兩個jar 拷貝至剛新建的libs目錄中 2、pom.xml中加入maven引入 2.1 使用SpringBoot打包插件生成jar包的時候,你會發(fā)現(xiàn)這個jar包不會被打進(jìn)去,進(jìn)而出現(xiàn)錯誤。解決這個問題就需要在

    2024年04月09日
    瀏覽(24)
  • react-前端excel 文件/PDF文件 導(dǎo)入 --導(dǎo)出,照片上傳

    react-前端excel 文件/PDF文件 導(dǎo)入 --導(dǎo)出,照片上傳

    需要了解,new FormData() --上傳時,將內(nèi)容轉(zhuǎn)為文件流 ? ? ? ? ? ? ? ? ? FormData提供一種表示表單數(shù)據(jù)的鍵值對的構(gòu)造方式,實(shí)現(xiàn)表單數(shù)據(jù)的序列化,從而減少表單元素的拼接,提高工作效率 ? ? ? ? ? ? ? ? ?new FileReader()--base64壓縮,目前不了解 一、excel文件導(dǎo)出 ? ? ?三

    2023年04月08日
    瀏覽(24)
  • POI實(shí)現(xiàn)導(dǎo)出復(fù)雜Excel(動態(tài)行,復(fù)雜單元格,水印,Excel轉(zhuǎn)換為PDF)。

    POI實(shí)現(xiàn)導(dǎo)出復(fù)雜Excel(動態(tài)行,復(fù)雜單元格,水印,Excel轉(zhuǎn)換為PDF)。

    ? 一、POI 表格框架 1.POI :?POI提供API給Java程序?qū)icrosoft Office格式檔案讀和寫的功能 2.HSSF:Horrible SpreadSheet Format,為讀取操作提供了兩類API:usermodel和eventusermodel,即“用戶模型”和“事件-用戶模型” 3.POI 文檔結(jié)構(gòu)類 ?HSSFWorkbook 文檔對象,HSSFSheet? 頁,HSSFRow 行,HSSFCell 單

    2024年02月06日
    瀏覽(19)
  • 將Visio和Excel導(dǎo)出成沒有白邊的PDF文件

    將Visio和Excel導(dǎo)出成沒有白邊的PDF文件

    在使用Latex時,要導(dǎo)入矢量圖eps格式。但是VISIO無法輸出eps格式,這就需要將其導(dǎo)出為pdf。但是導(dǎo)出pdf時,往往會有大量的白邊。VISIO無白邊導(dǎo)出pdf格式的方法如下: 1.文件——開發(fā)工具——顯示shapeSheet——頁 2.將其全部改為0 注:輸入0之后先按enter之后再輸入其他的0 3.設(shè)計(jì)—

    2024年02月14日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包