摘要:由于工作需要,要实现后端根据模板动态填充数据生成文档,通过技术选型,使用来设计模板,结合工具库来调用渲染生成文档。
由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲染生成PDF文档。本人文采欠缺,写作能力差,下面粗略的介绍其使用步骤,若有不对的地方,望大家莫喷,谢谢!
一、使用Ireport designer 5.6设计模板ireport的使用由于时间关系不便多说,设计好之后,将其进行编译生成jasper文件,然后将其拷贝放置于项目某个目录下,以供访问获取该文件。
二、在Spring Boot项目中引入依赖包三、自定义spring mvc通用导出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调用案例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文件,内容如下:
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文件,内容如下:
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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70882.html
摘要:日期和时间处理日期和时间的函数库。使用中可观察序列,创建异步基于事件应用程序的函数库。为分布式系统提供延迟和容错处理。发布使用本机格式分发应用程序的工具。将程序资源和打包成和的本机文件。图像处理用来帮助创建评估或操作图形的函数库。 好资源要分享原文 译者 唐尤华 翻译自 github akullpp 构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Mave...
摘要:格式文档导出,是信息系统中非常实用的一种功能,用于各种报表和文档的到处。示例中,使用生成要导出的格式文档,通过来实现文件下载。将转换成文档生成的代码比较简单,创建一个对象,然后会在指定的中输入生成的文件。作用相当于在中使用进行配置。 showImg(https://segmentfault.com/img/remote/1460000008547574); PDF格式文档导出,是信息系...
摘要:首先是从下载了,这个已经能够生成和文档了,但是对中文支持不好,中文大部分会显示为空白。关于这个对中文支持不好,查了很多资料,应该是字体和主题的原因,所以参考了很多资料,结合当前这个,做出了最终的能很好支持中文的,最终地址。 做后端开发,自然离不开接口文档,接口文档不仅方便后端开发人员之间查看,更是前端人员必要的文档,也有可能提供给第三方来调用我们的接口。但是,写接口文档太费时间,而且如...
摘要:本文为大家推荐款常用的开源报表制作工具,供开发者学习参考。一个基于的开源报表工具,它可以在环境下像其他报表工具一样来制作报表,支持和文件输出格式,是当前开发者最常用的报表工具。使用开发的,并使用作为报表生成引擎。 本文为大家推荐6款常用的Java开源报表制作工具,供开发者学习、参考。 1.Aspose.Cells for JasperReports一个基于Java的开源报表工具,它可以...
摘要:没错,不支持,从导出的文档也可以看到,部分中文无法显示,目前我也尚未找到是否有配置可以实现这个功能。相对前面的方式,使用起来更加简单,也可以修改配置输出中文。 更多精彩博文,欢迎访问我的个人博客 说明 我个人是一直使用Swagger作为接口文档的说明的。但是由于在一些情况下,接口文档说明需要以文件的形式交付出去,如果再重新写一份文档难免有些麻烦。于是在网上看到了Swagger2Mar...
阅读 2844·2021-11-24 09:39
阅读 3460·2021-11-22 13:54
阅读 3352·2021-11-16 11:45
阅读 2357·2021-09-09 09:33
阅读 3118·2019-08-30 15:55
阅读 1218·2019-08-29 15:40
阅读 866·2019-08-29 15:19
阅读 3320·2019-08-29 15:14