这个是跟上一篇写的freemarker导出word是一块的。但是关联性不是很大。由于本人技术有限本篇导出也是根据网上大家的做出的demo混合而成。有不足的地方请大家指出。好改正,使以后看到的freemarker导出pdf的朋友们能通俗易懂上手。

本程序是在maven中实现的所以如果有的朋友是用jar包实现的请注意版本号。

     <!-- itext 组件  -->
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.0.</version>
</dependency>
<!-- freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.0.</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>core-renderer</artifactId>
<version>R8</version>
</dependency>

这里需要注意下。itext要用2.0.8的版本要不然会在下面的itext使用的时候报字节错误。

程序也是个在web中实现的所以代码实现的时候也是访问的。

@RequestMapping(value="/pdfdown",method={RequestMethod.GET,RequestMethod.POST})
public void PDFchange(HttpServletRequest request, HttpServletResponse response) throws Exception{
//从数据库中查询需要的条件 Map<String,Object> variables = new HashMap<String,Object>(); List<UserTestBean> userList = new ArrayList<UserTestBean>(); UserTestBean tom = new UserTestBean("Tom",,);
UserTestBean amy = new UserTestBean("Amy",,);
UserTestBean leo = new UserTestBean("Leo",,); userList.add(tom);
userList.add(amy);
userList.add(leo); variables.put("title", "你看");
variables.put("userList", userList);
/*variables.put("title","gerenjianli");
variables.put("userName","xueyucheng");
variables.put("userSex","man");
variables.put("userAge","17");
variables.put("height","161");sss
variables.put("address","handan");
variables.put("University","ligong");sssss
variables.put("skill","jineng");
variables.put("content","asdasasd");*/
String ftlName="ceshi.ftl";
//然后组装好之后调用该方法 FTLIMAGEPATH是用的配置模板中的内容实现的
try {
ByteArrayOutputStream bos= PDFUtil.createPDF(request, ftlName, variables,FTLIMAGEPATH);/**字节*/
PDFUtil.renderPdf(response, bos.toByteArray(), "");
} catch (Exception e) {
logger.error("pdf导出出错。。。",e);
} }

bean可以自己随便写个只要按照模式就行。下面也是调用的pdf工具类。让其实现的是客户端下载保存。没有在服务器端保存

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.Locale;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.text.pdf.BaseFont; import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* pdf转换类
* @author test fengruiqi
* 创建 时间2017年2月4日 上午9:36:42
*
*/
public class PDFUtil { /**
* 创建pdf
* @author fengruiqi
* 创建时间 2017年2月4日 下午6:47:18
* @param request
* @param ftlName
* @param root
* @return
* @throws Exception
*/
public static ByteArrayOutputStream createPDF(HttpServletRequest request, String ftlName,Map root,String imageName) throws Exception {
String basePath =request.getSession().getServletContext().getRealPath("/");//绝对路径
String basePath2=basePath.replaceAll("\\\\", "/");
Configuration cfg = new Configuration();
try {
cfg.setLocale(Locale.CHINA);
cfg.setEncoding(Locale.CHINA, "UTF-8");
//设置编码
cfg.setDefaultEncoding("UTF-8");
//设置模板路径
cfg.setDirectoryForTemplateLoading(new File(basePath + "/WEB-INF/views/ftl/")); //解决图片路径问题 设置好图片所选择的路径
if(imageName!=null && !"".equals(imageName)){
root.put("imagePath",imageName);
}
//获取模板
Template template = cfg.getTemplate(ftlName);
template.setEncoding("UTF-8");
Writer writer = new StringWriter();
//数据填充模板
template.process(root, writer);
String str = writer.toString();
//pdf生成
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); ITextRenderer iTextRenderer = new ITextRenderer();
iTextRenderer.setDocumentFromString(str); //设置字体 其他字体需要添加字体库
ITextFontResolver fontResolver = iTextRenderer.getFontResolver();
fontResolver.addFont(basePath + "/WEB-INF/views/font/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
iTextRenderer.setDocument(builder.parse(new ByteArrayInputStream(str.getBytes())),null);
iTextRenderer.layout(); //生成PDF
ByteArrayOutputStream baos = new ByteArrayOutputStream();
iTextRenderer.createPDF(baos);
baos.close();
return baos;
} catch(Exception e) {
throw new Exception(e);
}
} /**
* 客户端下载pdf
* @author fengruiqi
* 创建时间 2017年2月4日 下午7:05:01
* @param response
* @param bytes
* @param filename
*/
public static void renderPdf(HttpServletResponse response, final byte[] bytes, final String filename) {
/* initResponseHeader(response, PDF_TYPE); */
setFileDownloadHeader(response, filename, ".pdf");
if (null != bytes) {
try {
response.getOutputStream().write(bytes);
response.getOutputStream().flush();
} catch (IOException e) {
throw new IllegalArgumentException(e);
}
}
} /**
* 分析并设置contentType与headers.
*/
/*
private HttpServletResponse initResponseHeader(HttpServletResponse response, final String contentType, final String... headers) {
// 分析headers参数
String encoding = DEFAULT_ENCODING;
boolean noCache = DEFAULT_NOCACHE;
for (String header : headers) {
String headerName = StringUtils.substringBefore(header, ":");
String headerValue = StringUtils.substringAfter(header, ":");
if (StringUtils.equalsIgnoreCase(headerName, HEADER_ENCODING)) {
encoding = headerValue;
} else if (StringUtils.equalsIgnoreCase(headerName, HEADER_NOCACHE)) {
noCache = Boolean.parseBoolean(headerValue);
} else {
throw new IllegalArgumentException(headerName + "不是一个合法的header类型");
}
}
// 设置headers参数
String fullContentType = contentType + ";charset=" + encoding;
response.setContentType(fullContentType);
if (noCache) {
// Http 1.0 header
response.setDateHeader("Expires", 0);
response.addHeader("Pragma", "no-cache");
// Http 1.1 header
response.setHeader("Cache-Control", "no-cache");
}
return response;
} */ /**
* 设置让浏览器弹出下载对话框的Header
* @author fengruiqi
* 创建时间 2017年2月4日 下午6:58:44
* @param response
* @param fileName
* @param fileType
*/
public static void setFileDownloadHeader(HttpServletResponse response, String fileName, String fileType) {
try {
// 中文文件名支持
String encodedfileName = new String(fileName.getBytes("GBK"), "ISO8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + fileType + "\"");
} catch (UnsupportedEncodingException e) {
}
} }

我在解决图片路径的问题时候没有用网上的使用绝对路径的方法,而是在模板中设置了存储路径的字段,

在程序中直接做成村路路径访问。不知道是因为包的原因还是其他什么,使用绝对路径我这里发现不了图片导出一直有错。

<html>
<head>
<title>${title}</title>
<style>
table {
width:100%;border:green dotted ;border-width:2 0 0 2
}
td {
border:green dotted;border-width:0 2 2 0
}
@page {
size: 8.5in 11in;
@bottom-center {
content: "page " counter(page) " of " counter(pages);
}
}
<#--使用字体一定要定义好-->
body {
font-family: SimSun;
font-size:14px;
font-style:italic;
font-weight:500;
} .heiti
{
font-family: simsun-bold;
}
</style>
</head>
<body>
<h1>Just a blank page.</h1> <div style="page-break-before:always;">
<div align="center">
<h1>${title}</h1>
</div>
<div>
<#-- freemarker的注释 imagePath是用来存储路径的 -->
图片支持 <img src="${imagePath}add.png " /> </div>
<table>
<tr>
<td><b>Name</b></td>
<td><b>Age</b></td>
<td><b>Sex</b></td>
</tr>
<#list userList as user>
<tr>
<td>${user.name}</td>
<td>${user.age}</td>
<td>
<#if user.sex = 1>
male
<#else>
◇◇
</#if>
</td>
</tr>
</#list>
</table>
</div>
</body>
</html>

  

原文地址:http://www.wang1314.com/doc/topic-1568137-1.html

Itext2.0.8 和freemarker导出pdf的更多相关文章

  1. PHP yii2.0框架利用mpdf导出pdf

    安装: composer require mpdf/mpdf 使用: use Mpdf\Mpdf;//(php7以前) //获取页面内容 $res = $this->controller-> ...

  2. flying-saucer + iText + Freemarker实现pdf的导出, 支持中文、css以及图片

    前言 项目中有个需求,需要将合同内容导出成pdf.上网查阅到了 iText , iText 是一个生成PDF文档的开源Java库,能够动态的从XML或者数据库生成PDF,同时还可以对文档进行加密,权限 ...

  3. java通过freemarker模板导出pdf

    需求:将网页内容导出为pdf文件,其中包含文字,图片,echarts图 原理:利用freemarker模板与数据渲染所得到的html内容,通过ITextRenderer对象解析html内容生成pdf ...

  4. asp.net2.0导出pdf文件完美解决方案【转载】

    asp.net2.0导出pdf文件完美解决方案 作者:清清月儿 PDF简介:PDF(Portable Document Format)文件格式是Adobe公司开发的电子文件格式.这种文件格式与操作系统 ...

  5. Proe5.0导出PDF至配置文件的相关方法,VC++

    定义文件bcsMessage.txt PLM PLM PLM # login login 测试 # Active messagebox menu Active messagebox menu 激活菜单 ...

  6. iText导出pdf、word、图片

    一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...

  7. Itext导出PDF,word,图片案例

    iText导出pdf.word.图片 一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生 ...

  8. 史上最全的springboot导出pdf文件

    最近项目有一个导出报表文件的需求,我脑中闪过第一念头就是导出pdf(产品经理没有硬性规定导出excel还是pdf文件),于是赶紧上网查看相关的资料,直到踩了无数的坑把功能做出来了才知道其实导出exce ...

  9. 利用itext导出PDF的小例子

    我这边使用的jar包: itext-2.1.7.jar itextasian-1.5.2.jar 代码,简单的小例子,导出pdf: PdfService.java: package com.cy.se ...

随机推荐

  1. StrBlobPtr类——weak_ptr访问vector元素

    #include <iostream> #include <memory> #include <string> #include <initializer_l ...

  2. (一)Model的产生及处理

    MVC的概念其实最早可以追溯到很久很久以前,并不是WEB开发过程中所首创, 但是,MVC也适合WEB上的开发,并真正的在WEB开发领域广泛应用.MVC的第一个字母M是Model,承载着View层和Co ...

  3. RXSwift --UITableView之初探

    对于RXSwift中的一些基本概念和说明请参看其他文章,接下来我们使用RXSwift一步一步去构建TableView,从简单到复杂.iOS开发过程中tableView的使用率是最高的,他的一些代理方法 ...

  4. JDK源码分析 – ArrayList

    ArrayList类的申明 ArrayList是一个支持泛型的,底层通过数组实现的一个可以存任意类型的数据结构,源码中的定义如下: public class ArrayList<E> ex ...

  5. css那些事儿4 背景图像

    background:背景颜色,图像,平铺方式,大小,位置 能够显示背景区域即为盒子模型的填充和内容部分,其中背景图像将会覆盖背景颜色.常见的水平或垂直渐变颜色背景通常使用水平或垂直渐变的背景图像在水 ...

  6. 转 PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

    PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)   通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便),curl_setopt 是php的一个 ...

  7. tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?

    和几个变量有非常大的关系 发送缓冲区的大小,如何单独设置一个socket的发送缓冲区 socketopt 发送缓冲区中的数据,如果被拥塞窗口限制住了,那么这些数据可能就放在tcpbuffer里的,此时 ...

  8. 【Linux】linux中删除指定文件外所有其他文件(夹)的问题

    今天碰到要删除指定文件(夹)外的其他文件的问题.网上查到的方法是这样的 需要在当前文件夹中进行: rm -rf !(keep) #删除keep文件之外的所有文件 rm -rf !(keep1|keep ...

  9. Bootstrap 基本模板理解

    <!-- 声明文档类型 为 html5 --> <!DOCTYPE html> <!-- 声明页面内容主要为 中文简体 --> <html lang=&quo ...

  10. java session特性

    1.当前浏览器不关闭 则一直有效 servlet就能取到值(未设置过期时间情况下 或者在过期的时间范围内)  算成一次会话 再次会话内多个请求都能获得session 2.session保存在服务端,通 ...