`
zzc1684
  • 浏览: 1229387 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

SpringMVC使用PDF模板生成PDF文件

阅读更多

本文先叙述,如何操作PDF模板生成PDF文件,再说明在SpringMVC中如何根据PDF模板生成PDF文件。

使用PDF模板生成PDF文件需要以下几个步骤:

下面按步骤说明:

1. 使用Microsoft Office Word画好模板

此步骤就不详述了,就是一个普通的Word文件(template.docx)。给个示例截图:

2. 使用Adobe Acrobat X Pro将Word文件转换为带表单字段的PDF模板文件

1) 打开Adobe Acrobat X Pro

2) 选择“创建PDF表单”

3) 选择源:(PDF、Word、Excel或其它文件类型),下一步

4) 定位Word文件路径,下一步

5) Adobe Acrobat X Pro会自动猜测表单字段位置,如图

6) 一般生成的表单字段都不符合我们的要求,选中删除即可。

7) 点击右键选择文本框,拖动到适当的位置,设置好域名称,字号,字体等。

8) 保存模板文件。(template.pdf)

3. 使用itext操作PDF模板,填充数据,生成PDF文件

1) 需要jar包:itext.jar、itextAsian.jar

2) 核心代码:

package personal.hutao.test;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;

public class TestPdf {

@Test
public void test() throws IOException, DocumentException {
String fileName = "D:/template.pdf"; // pdf模板
PdfReader reader = new PdfReader(fileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfStamper ps = new PdfStamper(reader, bos);
AcroFields fields = ps.getAcroFields();
fillData(fields, data());
ps.setFormFlattening(true);
ps.close();
OutputStream fos = new FileOutputStream("D:/contract.pdf");
fos.write(bos.toByteArray());
}

public void fillData(AcroFields fields, Map<String, String> data) throws IOException, DocumentException {
for (String key : data.keySet()) {
String value = data.get(key);
fields.setField(key, value);
}
}

public Map<String, String> data() {
Map<String, String> data = new HashMap<String, String>();
data.put("borrower", "胡桃同学");
return data;
}
}

 

3) 打开contract.pdf,如图

至此,就实现了根据PDF模板生成PDF文件。

SpringMVC的视图中已提供了对PDF模板文件的支持:org.springframework.web.servlet.view.document.AbstractPdfStamperView。那么只需要配置好此视图就可以了。具体分为以下步骤:

1) 实现抽象类 AbstractPdfStamperView

package personal.hutao.view;

import java.io.IOException;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.view.document.AbstractPdfStamperView;

import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfStamper;

public class PdfStamperView extends AbstractPdfStamperView {

public static final String DATA = "data";
public static final String FILENAME = "mergePdfFileName";

@SuppressWarnings("unchecked")
@Override
protected void mergePdfDocument(Map<String, Object> model,
PdfStamper stamper, HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setHeader("Content-Disposition", "attachment;filename=" + new String(model.get(FILENAME).toString().getBytes(), "ISO8859-1"));
AcroFields fields = stamper.getAcroFields();
fillData(fields, (Map<String, String>) model.get(DATA));
stamper.setFormFlattening(true);
}

private void fillData(AcroFields fields, Map<String, String> data)
throws IOException, DocumentException {
for (String key : data.keySet()) {
String value = data.get(key);
fields.setField(key, value);
}
}

}

 

2) 在SpringMVC的配置文件中配置视图

<!-- 按照BeanName解析视图 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1" />
</bean>

<!-- 定义Pdf模版视图 -->
<bean id="contract" class="personal.hutao.view.PdfStamperView">
<property name="url" value="/WEB-INF/template/template.pdf" />
</bean>

 

 

3) Controller中的业务逻辑处理

package personal.hutao.controller;

import static personal.hutao.view.PdfStamperView.DATA;
import static personal.hutao.view.PdfStamperView.FILENAME;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.coamctech.sample.commons.controller.BaseController;

@RequestMapping("/contract")
@Controller
public class TestController {

@RequestMapping("/export/pdf")
public String exportPersonalCreaditLoanContract(Model model) {
model.addAttribute(DATA, data());
model.addAttribute(FILENAME, "XXX贷款合同");
return "contract";
}

private Map<String, String> data() {
Map<String, String> data = new HashMap<String, String>();
data.put("borrower", "胡桃同学");
return data;
}
}

 

分享到:
评论

相关推荐

    SpringMVC:生成Excel和PDF

    其次,生成PDF文件通常依赖于iText库。在这个项目中,使用的版本包括iText-2.1.2.jar和iTextAsian.jar。iText是一个强大的PDF处理库,它提供了各种方法来创建、编辑和操作PDF文档。iTextAsian.jar是针对亚洲语言(如...

    Springmvc的pdf使用介绍及源码

    同时,对于大型项目,我们还可以考虑使用模板引擎如 Thymeleaf 或 FreeMarker 来动态生成 PDF 内容。 总的来说,Spring MVC 通过提供灵活的请求映射和响应处理机制,使得集成 PDF 功能变得简单。结合第三方库如 ...

    SpringMVC与iReport整合开发时的PDF中文显示处理

    在`jasperReport生成PDF中文依赖包`中,可能包含`.jrxml`文件,这是iReport的报表定义文件,用于描述报表的布局和数据来源。在设计报表时,要确保字体设置支持中文,例如使用SimSun(宋体)或其他支持UTF-8编码的...

    SpringMVC实战

    SpringMVC是Spring框架的一部分,专门用于构建Web应用程序。它是一个模型-视图-控制器(MVC)架构的...在提供的压缩包文件中,可能包含了SpringMVC的示例代码,可以作为学习和参考,进一步理解和掌握SpringMVC的使用。

    ireport+springMVC 报表导出pdf excel

    "ireport+springMVC 报表导出pdf excel"这个主题聚焦于如何利用iReport工具和SpringMVC框架来实现报表的PDF和Excel格式导出功能。下面我们将深入探讨这两个技术以及它们在报表生成中的应用。 首先,iReport是一款...

    EasyPoi的使用教程以及如何集成入SpringMVC中(详细)

    EasyPoi支持从模板文件中读取样式和数据结构,从而快速生成复杂的Excel文件。 ```java File templateFile = new File("template.xlsx"); ExportParams params = new ExportParams(); params.setTemplate(template...

    SpringMVC.pdf

    5. 编写视图:视图通常是一个JSP或其他模板文件,它负责生成响应给用户的界面。 以下是一个典型的SpringMVC的HelloWorld示例代码: ```java @Controller public class HelloWorldController { @RequestMapping(...

    SpringMVC+jspereport,实现报表分页查看、文件(pdf、excel、word)导出,以及html展示和调用浏览器打印功能实现打印

    在本项目中,JasperReport用于设计和生成报表模板,开发者可以使用iReport(版本5.6.0)这个图形化工具来设计复杂的报表布局。iReport提供了拖拽式界面,可以方便地添加表格、图表、文本等元素,同时支持SQL查询,...

    springboot在线展示pdf

    4. **编写Controller**:创建一个SpringBoot的Controller,用于处理PDF文件的请求。这个Controller应该能够读取PDF文件,然后将其作为HTTP响应的流返回。例如: ```java @GetMapping("/pdf/{filename}") public ...

    itext加载velocity生成PDF

    将两者结合,我们可以利用`Velocity`的模板能力来动态生成PDF内容,这在SpringMVC框架中尤其方便。 `iText`库提供了一系列API,用于创建PDF文档、添加文字、图像、表格等元素。它支持流式和模型两种模式,前者适用...

    SpringMVC+Nutz框架介绍范本模板.pdf

    - **文件输出**:`@SFile`注解实现文件的自动输出,如PDF格式。 - **JSON输出**:`@SJson`注解自动将结果转化为JSON字符串,适应前后端分离开发。 - **自定义路由**:支持显性和隐性转发,增强路由控制能力。 - **...

    完美整合框架包(Spring+SpringMVC+mybitas+文件上传下载+邮件+短信支持+生成PDF、Excel)

    生成PDF和Excel文件的功能常用于报表或者数据导出。PDF生成可以借助iText、Apache PDFBox等库,而Excel生成则可以使用Apache POI库。在SSM框架中,可以通过Controller接收请求,调用后台服务生成文件,然后以流的...

    SSM+freemaker+jacob实现生成word文档并转换为PDF 另一个是错的

    对于生成的Word和PDF文件,可以手动检查其内容和格式,以确定错误的具体位置。 总的来说,SSM+FreeMarker+jacob实现的Word到PDF转换是一个涉及多个技术栈的复杂过程。开发者需要理解每个组件的工作原理,以及它们...

    SpringMVC+Nutz框架介绍.pdf

    @SFile则简化了文件输出,如PDF的生成。@SLog用于记录方法执行日志,提供了灵活的日志扩展机制。 权限体系方面,平台深度定制了Shiro,实现了三级权限验证体系,覆盖了平台、商家和会员的不同场景,支持按钮级和...

    SpringMVC+iReport多张报表连续输出案例

    iReport支持JasperReports库,可以生成PDF、HTML、Excel等多种格式的报表。在多张报表连续输出的场景下,iReport可以设计出多页的报表模板,然后由SpringMVC驱动进行动态填充和合并输出。 为了实现在SpringMVC中...

    springmvc的基本使用

    `springmvc入门详解.pdf`可能包含详细的步骤和实例,从创建项目、配置环境到编写第一个简单的Spring MVC应用,包括Hello World示例的Controller、配置文件设置、运行及调试等。 综上所述,Spring MVC 提供了一套...

    SpringMVC jaspersoft

    - **报表模板设计**:使用iReport工具设计报表模板。设计完成后,将`.jrxml`文件编译为`.jasper`文件,并将其放置在项目的`/WEB-INF/jasper/`目录下。 - **编写Controller方法**:在Controller中定义方法来处理报表...

Global site tag (gtag.js) - Google Analytics