最近需要做一个功能,把jsp页面转成pdf,jsp页面有动态填充的数据,网上找了一些资料,基本上都是纯html页面数据转pdf,达不到动态填充数据的要求,结合网上查询的资料,动手改造一下jsp动态数据转pdf并下载文件。
首先准备需要依赖的maven包和字体文件。
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>core-renderer</artifactId>
<version>R8</version>
</dependency>
字体文件:simsun.ttc
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;
/**
* html转pdf工具
*
*/
public class TtmlToPdfUtil {
/**
* 把URL转换为PDF
* @param url 需要生成pdf的页面url
* @param filePath 生成的pdf存放目录
*/
public static void htmlToPdf(String url, String filePath){
try {
File outFile = new File(filePath);
if (!outFile.exists()) {
outFile.getParentFile().mkdirs();
}
OutputStream os = new FileOutputStream(filePath);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
String fontPath = "/simsun.ttc";//字体
// 解决中文支持问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 下载
* @param response
* @param filePath
*/
public static void downloadPdf(HttpServletResponse response, String filePath) {
try {
File file = new File(filePath);
InputStream inputStream = new FileInputStream(file);
OutputStream os = response.getOutputStream();
byte[] b = new byte[1024];
int length;
while ((length = inputStream.read(b)) > 0) {
os.write(b, 0, length);
}
inputStream.close();
file.delete();//下载完后删除
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
调用的方法:
/**
* 下载
* @param request
* @param response
* @param stuId
* @throws Exception
*/
@RequestMapping("/downStuPdf")
public void downpdf(HttpServletRequest request, HttpServletResponse response,Integer stuId) throws Exception{
Student stu = stuService.get(stuId);
String fileName = stu.getName+".pdf";//生成的文件名称
response.setCharacterEncoding("UTF-8");//设置相应内容的编码格式
response.setHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("GBK"), "ISO8859-1"));
response.setContentType("application/pdf");//定义输出类型
//http://127.0.0.1:8080/stu/getStuInfo.do
TtmlToPdfUtil.htmlToPdf(ServerContext.getLocalUrl()+"getStuInfo.do?stuId="+stuId, fileName);
TtmlToPdfUtil.downloadPdf(response, fileName);
}
/**
* 动态赋值信息到页面
* @return
*/
@RequestMapping("/getStuInfo")
public ModelAndView stuInfo(Integer stuId) {
Map<String, Object> map = new HashMap<String, Object>();
//姓名和年龄从数据库取,这里测试
// Student stu = stuService.get(stuId);
map.put("name", "张三");
map.put("age", 20);
return new ModelAndView("student.jsp", map);
}
上面下载的方法中,使用了两步,第一步先把需要生成pdf的页面生成文件后存放在某个磁盘目录,再然后从磁盘里下载文件,有兴趣的朋友可以尝试下能否直接在生成pdf的时候输出到浏览器下载文件。服务端动态取出数据后,jsp页面采用el表达式设置相应的值即可。字体文件太大,系统上传不了,自行网上下载。
这里有个坑提示下大家,转成pdf的页面如果一行文字太长,最后生成的pdf会自动截断后面显示不下的文字,这里提供一个勉强的解决方案,在jsp页面<head>标签中写如下样式,即生成的pdf默认为A4纸的尺寸,可以让文字显示全一些。也可以设置为A1,A2,但是好像并没什么作用,网上查了一些资料说是要修改源码包代码,重新自定义大小,比较麻烦。另外待生成的页面必须严格遵守w3c规范,标签必须关闭,否则生成一定出错。
<style>
body{font-family:SimSun;}
@page{size:A4;margin:0;}
</style>
- 大小: 17.1 KB
分享到:
相关推荐
本教程将介绍如何通过JavaServer Pages (JSP) 技术来创建包含中文字符的PDF文件。我们将讨论必要的库、步骤以及一些常见问题的解决方案。 首先,"通过jsp生成PDF文件(包括中文格式)"这一标题暗示了我们需要使用支持...
在IT行业中,生成PDF文件是常见的需求,尤其是在报表和数据分析领域。JSP(JavaServer Pages)作为Java平台上的动态网页技术,提供了与后端数据交互并呈现的方式。本篇文章将详细探讨如何在JSP页面中利用Highcharts...
标题“JSP页面显示PDF,根据PDF路径在JSP页面显示PDF”意味着我们要依据PDF文件在服务器上的存储路径来生成预览链接。以下是实现这一功能的一般步骤: 1. **获取PDF路径**:首先,你需要知道PDF文件在服务器上的...
3. **字符集处理**:在多语言环境下,字符集的正确设置至关重要,确保转换后的PDF文件能够正确显示各种字符,避免乱码问题。项目中提到字符集问题已解决,这意味着在转换过程中已经考虑到了不同语言和特殊字符的支持...
"jsp在线浏览pdf文件的jar包和插件"就是解决这个问题的一种方案。这个资源提供了一个便捷的方法,允许开发者将PDF预览功能快速集成到自己的项目中,只需要一行代码即可实现。 首先,我们要理解这个资源的核心是`...
JSP(Java Server Pages)是一种动态网页技术,用于开发基于Web的应用程序。JSP技术可以和其他Java技术集成,实现复杂的Web应用程序。下面是JSP实现文件上传与下载的知识点总结: 一、JSP文件上传的基本步骤 1. 在...
- 转换完成后,将生成的PDF文件保存到服务器的指定位置,或者直接输出到HTTP响应,供用户下载。 4. **错误处理**:在整个过程中,需要处理可能出现的各种异常,如文件上传失败、转换过程中的错误等。合理的错误...
通常,这涉及到读取JSP页面内容,设置PDF生成参数(如页边距、纸张大小),然后调用转换方法生成PDF文件。此外,property配置文件可能包含了一些默认设置或者用户自定义的转换选项,如默认字体、页面模板等,可以按...
这个压缩包“前台js将JSP转换成PDF文件涉及的两个js插件.zip”提供了两个关键的JavaScript库,用于实现这一功能。下面将详细介绍这两个插件及其工作原理。 首先,`jsPdf.debug.js`是`jsPDF`库的调试版本。`jsPDF`是...
在这个场景中,"iText把jsp转pdf并支持添加页眉页脚"涉及到的是如何使用iText将动态生成的JSP页面转换为静态的PDF文件,并在此过程中添加自定义的页眉和页脚。 JSP(JavaServer Pages)是一种服务器端的编程技术,...
在某些应用场景下,如报表生成、数据导出等,我们可能需要在JSP页面上提供功能来导出数据为PDF文件。下面将详细介绍如何在JSP中实现PDF文件的导出。 首先,我们需要一个库来帮助我们生成PDF。一个常见的选择是iText...
这个PDF教程全面覆盖了JSP动态网站开发的各个环节,适合希望通过实践学习JSP技术的读者。通过深入学习和实践,你将具备独立开发功能丰富的动态网站的能力。文件"jb51.net"可能包含该PDF教程的下载链接或者相关资源,...
首先,我们需要创建一个JSP页面来处理PDF文件的请求。以下为示例代码: ```jsp *,java.io.*" pageEncoding="UTF-8"%> ``` - **`<%@ page %>`**:这是JSP页面的声明部分,用于定义页面的基本属性。 - `language=...
“JSP案例开发集锦”PDF教程可能包含了各种实际项目中的JSP应用示例,涵盖了基础到高级的技术点,包括数据库连接、表单处理、文件上传下载、AJAX交互等。通过学习这些案例,开发者可以快速掌握JSP的实际应用技巧,并...
在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,结合了HTML、脚本语言(如JavaScript)以及服务器端的Java代码。本文将深入探讨如何使用JSP来实现文件的上传和下载功能,这对于构建交互性...
在本场景中,JSP将用于构建一个Web接口,用户可以通过这个接口上传Word或PDF文件并进行在线预览。 Eclipse是一款广泛使用的Java集成开发环境(IDE),它提供了强大的编辑、调试和项目管理工具。在开发过程中,...
Java JSP 生成 PDF 使用的是一个名为 Flying Saucer 的库,它是一个开源项目,专门用于将 HTML 内容转换为高质量的 PDF 文件。这个过程在 IT 行业中非常重要,因为许多应用程序需要将动态生成的网页内容导出为可打印...
### JSP的PDF文档知识点详解 #### 一、JSP简介 JSP(JavaServer Pages)是一种基于Java的服务器端技术,用于创建动态网页。它允许开发者将静态HTML代码和动态Java代码混合在一起,从而使服务器能够根据用户请求生成...
本文档介绍了一种使用JSP技术实现在线阅读PDF文件的方法。该方法通过HTML中的`<object>`标签结合特定的ClassID来实现在浏览器中直接显示PDF文件的功能。 #### 二、核心代码分析 ##### 1. JSP页面基础结构 ```jsp ;...
2. **JSP指令(Directives)**:例如`<%@ page>`、`<%@ include>`和`<%@ taglib>`,用于设置页面属性,包含其他文件,以及引入自定义标签库。 3. **JSP动作元素(Actions)**:如`<jsp:include>`、`<jsp:forward>`、...