springmvc 生成pdf,并下载
2015-06-14 20:33
501 查看
新手一枚,帮人做了一个小网站,记录一下自己遇到的坑以及解决的办法。
1.直接有程序生成,直接用代码控制每一行,每一列的生成。这种主要适用于需求是不确定要生成的文档的具体的样子,而是根据数据库数据动态生成。这种需求比较麻烦。主要是控制每一行,每一列实在是很麻烦,行高,列宽。还得考虑显示像素和实际打印出的文档的区别。而且那些操作文档的开源api,有可能也没有提供你想要的那种效果的接口,那时候就gg了。个人感觉除非是非用不可,要不然一般都不建议使用
2.第二种就是事先手动生成一个模板文件,动态的数据内容利用程序直接把内容填在里面,就像是在做填空题。感觉基本上大家都是在用这种方法。比较简单。
好,现在就是生成pdf的具体实现了。
2,iText-5.0.6.jar 这是操作pdf的jar包,在项目中导入它,就能对pdf的内容进行操作了
2 利用Adobe Acrobat 打开pdf,在需要填写内容的地方添加一个表单文本域,给文本域取一个名字,这是一个标识,其实和html的input是一样一样的额,比如这样,
然后保存好pdf,
3 读取文件,将数据填入相应的文本域中,然后导出,代码好像也是在csdn找的,自己改了一下
下面是springmvc的一个方法,提供下载的接口,代码好像也是在csdn找的。。。。。。。
springmvc 生成pdf,并下载
目前生成pdf,word,excel文档,基本上就是两种套路:1.直接有程序生成,直接用代码控制每一行,每一列的生成。这种主要适用于需求是不确定要生成的文档的具体的样子,而是根据数据库数据动态生成。这种需求比较麻烦。主要是控制每一行,每一列实在是很麻烦,行高,列宽。还得考虑显示像素和实际打印出的文档的区别。而且那些操作文档的开源api,有可能也没有提供你想要的那种效果的接口,那时候就gg了。个人感觉除非是非用不可,要不然一般都不建议使用
2.第二种就是事先手动生成一个模板文件,动态的数据内容利用程序直接把内容填在里面,就像是在做填空题。感觉基本上大家都是在用这种方法。比较简单。
好,现在就是生成pdf的具体实现了。
第一步,原料与工具,
1,生成pdf模板的工具,Adobe Acrobat 这是adobe公司的软件,可以操作pdf文件,在里面添加表单,就是制作填空题的那个空。2,iText-5.0.6.jar 这是操作pdf的jar包,在项目中导入它,就能对pdf的内容进行操作了
第二步,制作模板,生成文件并下载
1 利用word制作好需要的报表,然后导出为pdf。2 利用Adobe Acrobat 打开pdf,在需要填写内容的地方添加一个表单文本域,给文本域取一个名字,这是一个标识,其实和html的input是一样一样的额,比如这样,
然后保存好pdf,
3 读取文件,将数据填入相应的文本域中,然后导出,代码好像也是在csdn找的,自己改了一下
public class pdfUtil { /** * 根据pdf模板填充相应的值: 1,如果是根据excel填充的话,在用Acrobat生成PDF模板前, * Excel单元格格式最好设置成文本,否则pdf填充值时可能中文无法显示 */ public static byte[] fromPDFTempletToPdfWithValue(Map<String,String> map) { ByteArrayOutputStream bos=null; PdfStamper ps=null; Document document=null; byte[] result=null; try { PdfReader reader = new PdfReader(PropertyConfig.TEMPLET_PATH); bos = new ByteArrayOutputStream(); ps = new PdfStamper(reader, bos); /** * 使用中文字体 如果是利用 AcroFields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体就行了 */ // BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", // BaseFont.NOT_EMBEDDED); // Font font = new Font(bf, 12, Font.NORMAL); AcroFields s = ps.getAcroFields(); //读取文本域 Set<String> keys=map.keySet();//map里保存要填入的数据,key和文本域的name一样 for(String key:keys ){ s.setField(key, map.get(key)); } document = new Document(); document.open(); ps.setFormFlattening(true); ps.close(); result=bos.toByteArray(); bos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { document.close(); try { ps.close(); bos.close(); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result;//返回一个直接数组 } public static byte[] reFileToByteArray() { // TODO Auto-generated method stub return null; } }
下面是springmvc的一个方法,提供下载的接口,代码好像也是在csdn找的。。。。。。。
/** * 下载pdf报告 * @param session * @return */ @RequestMapping("download") public ResponseEntity<byte[]> dowload1(HttpSession session){ JSONObject O=(JSONObject)session.getAttribute("export"); Map<String,String> map=new HashMap<String, String>(); Set<String> keys=O.keySet(); for(String key:keys){ map.put(key, O.getString(key)); } HttpHeaders headers = new HttpHeaders(); String fileName = null; try { fileName = new String(("xxx报告-"+O.getString("name").trim()+".pdf").getBytes("gb2312"),"iso-8859-1");//解决中文乱码 } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); }//为了解决中文名称乱码问题 headers.setContentDispositionFormData("attachment", fileName); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<byte[]>(pdfUtil.fromPDFTempletToPdfWithValue(map),headers, HttpStatus.OK); }ok,打完收工,
相关文章推荐
- PDF里的文字显示模糊的解决方法
- PDF编辑工具 Foxit PDF Editor 1.5 Build 2911 下载
- 没有文件大小限制并免费的PDF到HTML转换工具
- MicroAdobe PDF Editor 6.2 英文正式版附破解补丁 下载
- PDF的VBS小程序代码
- c#实现将pdf转文本的示例分享
- C#使用iTextSharp封装的PDF文件操作类实例
- C#编程读取文档Doc、Docx及Pdf内容的方法
- C#使用itextsharp生成PDF文件的实现代码
- 使用java为pdf添加书签的方法(pdf书签制作)
- java中输出pdf文件代码分享
- PHP中使用imagick实现把PDF转成图片
- 使用pdfbox实现pdf文本提取和合并功能示例
- PHP实现HTML生成PDF文件的方法
- PHP在网页中动态生成PDF文件详细教程
- PHP中使用Imagick读取pdf并生成png缩略图实例
- ASP.NET实现将word文档转换成pdf的方法
- C# 中使用iTextSharp组件创建PDF的简单方法
- SpringMVC文件上传 多文件上传实例
- java使用pdfbox操作pdf文件示例