摘要:由于工作需要,要實(shí)現(xiàn)后端根據(jù)模板動(dòng)態(tài)填充數(shù)據(jù)生成文檔,通過技術(shù)選型,使用來設(shè)計(jì)模板,結(jié)合工具庫來調(diào)用渲染生成文檔。
由于工作需要,要實(shí)現(xiàn)后端根據(jù)模板動(dòng)態(tài)填充數(shù)據(jù)生成PDF文檔,通過技術(shù)選型,使用Ireport5.6來設(shè)計(jì)模板,結(jié)合JasperReports5.6工具庫來調(diào)用渲染生成PDF文檔。本人文采欠缺,寫作能力差,下面粗略的介紹其使用步驟,若有不對(duì)的地方,望大家莫噴,謝謝!
一、使用Ireport designer 5.6設(shè)計(jì)模板ireport的使用由于時(shí)間關(guān)系不便多說,設(shè)計(jì)好之后,將其進(jìn)行編譯生成jasper文件,然后將其拷貝放置于項(xiàng)目某個(gè)目錄下,以供訪問獲取該文件。
二、在Spring Boot項(xiàng)目中引入依賴包三、自定義spring mvc通用導(dǎo)出PDF視圖類PdfReportView(繼承自AbstractView )net.sf.jasperreports jasperreports 6.0.0 net.sf.jasperreports jasperreports-fonts 6.0.0 com.itextpdf itextpdf 5.5.0 com.itextpdf itext-pdfa 5.5.0 com.itextpdf itext-asian 5.2.0 org.codehaus.groovy groovy-all 2.4.11
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JREmptyDataSource; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import org.springframework.web.servlet.view.AbstractView; public class PdfReportView extends AbstractView { private static final String CONTENT_TYPE = "application/pdf"; private String templatePath; private String exportFileName; public PdfReportView(String templatePath, String exportFileName) { this.templatePath = templatePath; if (exportFileName != null) { try { exportFileName = URLEncoder.encode(exportFileName, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } this.exportFileName = exportFileName; setContentType(CONTENT_TYPE); } protected Map四、spring mvc調(diào)用案例getParamsMap(Map map) throws Exception { Map params = new HashMap<>(); for (String key : map.keySet()) { Object val = map.get(key); if (val instanceof JRDataSource) { continue; } else { params.put(key, val); } } return params; } protected JRDataSource getDataSource(Map map) throws Exception { for (String key : map.keySet()) { Object val = map.get(key); if (val instanceof JRDataSource) { return (JRDataSource) map.get(key); } } return new JREmptyDataSource(); } @Override protected void renderMergedOutputModel(Map map, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setCharacterEncoding("utf-8"); response.setContentType(getContentType()); //response.setContentType("application/octet-stream"); response.setHeader("content-disposition", "attachment;filename=" + exportFileName + ".pdf"); try (InputStream inputStream = Thread.currentThread().getContextClassLoader() .getResourceAsStream(templatePath)) { try (OutputStream ouputStream = response.getOutputStream()) { JasperPrint jasperPrint = JasperFillManager .fillReport(inputStream, getParamsMap(map), getDataSource(map)); JasperExportManager.exportReportToPdfStream(jasperPrint, ouputStream); } catch (IOException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } }
Map五、解決linux下宋體渲染問題map = new HashMap<>(); List
1、在src/main/resources路徑下新建jasperreports_extension.properties文件,內(nèi)容如下:
net.sf.jasperreports.awt.ignore.missing.font=true net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory net.sf.jasperreports.extension.simple.font.families.dejavu=fonts/fonts.xml
2、在src/main/resources路徑下新建fonts目錄,并新建fonts.xml文件,內(nèi)容如下:
net/sf/jasperreports/fonts/dejavu/DejaVuSans.ttf net/sf/jasperreports/fonts/dejavu/DejaVuSans-Bold.ttf net/sf/jasperreports/fonts/dejavu/DejaVuSans-Oblique.ttf net/sf/jasperreports/fonts/dejavu/DejaVuSans-BoldOblique.ttf Identity-H true "DejaVu Sans", Arial, Helvetica, sans-serif "DejaVu Sans", Arial, Helvetica, sans-serif net/sf/jasperreports/fonts/dejavu/DejaVuSerif.ttf net/sf/jasperreports/fonts/dejavu/DejaVuSerif-Bold.ttf net/sf/jasperreports/fonts/dejavu/DejaVuSerif-Italic.ttf net/sf/jasperreports/fonts/dejavu/DejaVuSerif-BoldItalic.ttf Identity-H true "DejaVu Serif", "Times New Roman", Times, serif "DejaVu Serif", "Times New Roman", Times, serif net/sf/jasperreports/fonts/dejavu/DejaVuSansMono.ttf net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-Bold.ttf net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-Oblique.ttf net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-BoldOblique.ttf Identity-H true "DejaVu Sans Mono", "Courier New", Courier, monospace "DejaVu Sans Mono", "Courier New", Courier, monospace "DejaVu Sans", Arial, Helvetica, sans-serif "DejaVu Sans", Arial, Helvetica, sans-serif "DejaVu Serif", "Times New Roman", Times, serif "DejaVu Serif", "Times New Roman", Times, serif "DejaVu Sans Mono", "Courier New", Courier, monospace "DejaVu Sans Mono", "Courier New", Courier, monospace fonts/simsun.ttf fonts/simsun.ttf fonts/simsun.ttf fonts/simsun.ttf Identity-H true "宋體", Arial, Helvetica, sans-serif "宋體", Arial, Helvetica, sans-serif
3、在src/main/resources/fonts目錄放入宋體字體文件 simsun.ttf
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/70882.html
摘要:日期和時(shí)間處理日期和時(shí)間的函數(shù)庫。使用中可觀察序列,創(chuàng)建異步基于事件應(yīng)用程序的函數(shù)庫。為分布式系統(tǒng)提供延遲和容錯(cuò)處理。發(fā)布使用本機(jī)格式分發(fā)應(yīng)用程序的工具。將程序資源和打包成和的本機(jī)文件。圖像處理用來幫助創(chuàng)建評(píng)估或操作圖形的函數(shù)庫。 好資源要分享原文 譯者 唐尤華 翻譯自 github akullpp 構(gòu)建 這里搜集了用來構(gòu)建應(yīng)用程序的工具。 Apache Maven:Mave...
摘要:格式文檔導(dǎo)出,是信息系統(tǒng)中非常實(shí)用的一種功能,用于各種報(bào)表和文檔的到處。示例中,使用生成要導(dǎo)出的格式文檔,通過來實(shí)現(xiàn)文件下載。將轉(zhuǎn)換成文檔生成的代碼比較簡(jiǎn)單,創(chuàng)建一個(gè)對(duì)象,然后會(huì)在指定的中輸入生成的文件。作用相當(dāng)于在中使用進(jìn)行配置。 showImg(https://segmentfault.com/img/remote/1460000008547574); PDF格式文檔導(dǎo)出,是信息系...
摘要:首先是從下載了,這個(gè)已經(jīng)能夠生成和文檔了,但是對(duì)中文支持不好,中文大部分會(huì)顯示為空白。關(guān)于這個(gè)對(duì)中文支持不好,查了很多資料,應(yīng)該是字體和主題的原因,所以參考了很多資料,結(jié)合當(dāng)前這個(gè),做出了最終的能很好支持中文的,最終地址。 做后端開發(fā),自然離不開接口文檔,接口文檔不僅方便后端開發(fā)人員之間查看,更是前端人員必要的文檔,也有可能提供給第三方來調(diào)用我們的接口。但是,寫接口文檔太費(fèi)時(shí)間,而且如...
摘要:本文為大家推薦款常用的開源報(bào)表制作工具,供開發(fā)者學(xué)習(xí)參考。一個(gè)基于的開源報(bào)表工具,它可以在環(huán)境下像其他報(bào)表工具一樣來制作報(bào)表,支持和文件輸出格式,是當(dāng)前開發(fā)者最常用的報(bào)表工具。使用開發(fā)的,并使用作為報(bào)表生成引擎。 本文為大家推薦6款常用的Java開源報(bào)表制作工具,供開發(fā)者學(xué)習(xí)、參考。 1.Aspose.Cells for JasperReports一個(gè)基于Java的開源報(bào)表工具,它可以...
摘要:沒錯(cuò),不支持,從導(dǎo)出的文檔也可以看到,部分中文無法顯示,目前我也尚未找到是否有配置可以實(shí)現(xiàn)這個(gè)功能。相對(duì)前面的方式,使用起來更加簡(jiǎn)單,也可以修改配置輸出中文。 更多精彩博文,歡迎訪問我的個(gè)人博客 說明 我個(gè)人是一直使用Swagger作為接口文檔的說明的。但是由于在一些情況下,接口文檔說明需要以文件的形式交付出去,如果再重新寫一份文檔難免有些麻煩。于是在網(wǎng)上看到了Swagger2Mar...
閱讀 2922·2021-11-24 09:39
閱讀 3599·2021-11-22 13:54
閱讀 3409·2021-11-16 11:45
閱讀 2433·2021-09-09 09:33
閱讀 3194·2019-08-30 15:55
閱讀 1290·2019-08-29 15:40
閱讀 920·2019-08-29 15:19
閱讀 3396·2019-08-29 15:14