`
assen
  • 浏览: 62207 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

动态jsp转pdf文件

阅读更多
最近需要做一个功能,把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
分享到:
评论

相关推荐

    通过jsp生成PDF文件(包括中文格式)

    本教程将介绍如何通过JavaServer Pages (JSP) 技术来创建包含中文字符的PDF文件。我们将讨论必要的库、步骤以及一些常见问题的解决方案。 首先,"通过jsp生成PDF文件(包括中文格式)"这一标题暗示了我们需要使用支持...

    jsp生成pdf文件

    在IT行业中,生成PDF文件是常见的需求,尤其是在报表和数据分析领域。JSP(JavaServer Pages)作为Java平台上的动态网页技术,提供了与后端数据交互并呈现的方式。本篇文章将详细探讨如何在JSP页面中利用Highcharts...

    JSP页面显示PDF,根据PDF路径在JSP页面显示PDF

    标题“JSP页面显示PDF,根据PDF路径在JSP页面显示PDF”意味着我们要依据PDF文件在服务器上的存储路径来生成预览链接。以下是实现这一功能的一般步骤: 1. **获取PDF路径**:首先,你需要知道PDF文件在服务器上的...

    jsp转pdf项目示例

    3. **字符集处理**:在多语言环境下,字符集的正确设置至关重要,确保转换后的PDF文件能够正确显示各种字符,避免乱码问题。项目中提到字符集问题已解决,这意味着在转换过程中已经考虑到了不同语言和特殊字符的支持...

    jsp在线浏览pdf文件的jar包和插件

    "jsp在线浏览pdf文件的jar包和插件"就是解决这个问题的一种方案。这个资源提供了一个便捷的方法,允许开发者将PDF预览功能快速集成到自己的项目中,只需要一行代码即可实现。 首先,我们要理解这个资源的核心是`...

    JSP实现文件上传与下载.pdf

    JSP(Java Server Pages)是一种动态网页技术,用于开发基于Web的应用程序。JSP技术可以和其他Java技术集成,实现复杂的Web应用程序。下面是JSP实现文件上传与下载的知识点总结: 一、JSP文件上传的基本步骤 1. 在...

    jsp实现将office文件转换成PDF格式

    - 转换完成后,将生成的PDF文件保存到服务器的指定位置,或者直接输出到HTTP响应,供用户下载。 4. **错误处理**:在整个过程中,需要处理可能出现的各种异常,如文件上传失败、转换过程中的错误等。合理的错误...

    jsp转换pdf工具,包含pd4ml.jar,ss_css2.jar,fonts.jar

    通常,这涉及到读取JSP页面内容,设置PDF生成参数(如页边距、纸张大小),然后调用转换方法生成PDF文件。此外,property配置文件可能包含了一些默认设置或者用户自定义的转换选项,如默认字体、页面模板等,可以按...

    前台js将JSP转换成PDF文件涉及的两个js插件.zip

    这个压缩包“前台js将JSP转换成PDF文件涉及的两个js插件.zip”提供了两个关键的JavaScript库,用于实现这一功能。下面将详细介绍这两个插件及其工作原理。 首先,`jsPdf.debug.js`是`jsPDF`库的调试版本。`jsPDF`是...

    iText把jsp转pdf并支持添加页眉页脚

    在这个场景中,"iText把jsp转pdf并支持添加页眉页脚"涉及到的是如何使用iText将动态生成的JSP页面转换为静态的PDF文件,并在此过程中添加自定义的页眉和页脚。 JSP(JavaServer Pages)是一种服务器端的编程技术,...

    jsp导出pdf文件代码

    在某些应用场景下,如报表生成、数据导出等,我们可能需要在JSP页面上提供功能来导出数据为PDF文件。下面将详细介绍如何在JSP中实现PDF文件的导出。 首先,我们需要一个库来帮助我们生成PDF。一个常见的选择是iText...

    jsp动态网站开发pdf

    这个PDF教程全面覆盖了JSP动态网站开发的各个环节,适合希望通过实践学习JSP技术的读者。通过深入学习和实践,你将具备独立开发功能丰富的动态网站的能力。文件"jb51.net"可能包含该PDF教程的下载链接或者相关资源,...

    jsp引入pdf文档

    首先,我们需要创建一个JSP页面来处理PDF文件的请求。以下为示例代码: ```jsp *,java.io.*" pageEncoding="UTF-8"%&gt; ``` - **`&lt;%@ page %&gt;`**:这是JSP页面的声明部分,用于定义页面的基本属性。 - `language=...

    JSP案例开发集锦 PDF文件

    “JSP案例开发集锦”PDF教程可能包含了各种实际项目中的JSP应用示例,涵盖了基础到高级的技术点,包括数据库连接、表单处理、文件上传下载、AJAX交互等。通过学习这些案例,开发者可以快速掌握JSP的实际应用技巧,并...

    JSP实现文件上传和下载

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,结合了HTML、脚本语言(如JavaScript)以及服务器端的Java代码。本文将深入探讨如何使用JSP来实现文件的上传和下载功能,这对于构建交互性...

    jsp在线转word,在线PDF显示

    在本场景中,JSP将用于构建一个Web接口,用户可以通过这个接口上传Word或PDF文件并进行在线预览。 Eclipse是一款广泛使用的Java集成开发环境(IDE),它提供了强大的编辑、调试和项目管理工具。在开发过程中,...

    java jsp 生成 pdf flyingsaucer

    Java JSP 生成 PDF 使用的是一个名为 Flying Saucer 的库,它是一个开源项目,专门用于将 HTML 内容转换为高质量的 PDF 文件。这个过程在 IT 行业中非常重要,因为许多应用程序需要将动态生成的网页内容导出为可打印...

    JSP的PDF文档

    ### JSP的PDF文档知识点详解 #### 一、JSP简介 JSP(JavaServer Pages)是一种基于Java的服务器端技术,用于创建动态网页。它允许开发者将静态HTML代码和动态Java代码混合在一起,从而使服务器能够根据用户请求生成...

    jsp在线阅读pdf

    本文档介绍了一种使用JSP技术实现在线阅读PDF文件的方法。该方法通过HTML中的`&lt;object&gt;`标签结合特定的ClassID来实现在浏览器中直接显示PDF文件的功能。 #### 二、核心代码分析 ##### 1. JSP页面基础结构 ```jsp ;...

    JSP宝典(PDF)

    2. **JSP指令(Directives)**:例如`&lt;%@ page&gt;`、`&lt;%@ include&gt;`和`&lt;%@ taglib&gt;`,用于设置页面属性,包含其他文件,以及引入自定义标签库。 3. **JSP动作元素(Actions)**:如`&lt;jsp:include&gt;`、`&lt;jsp:forward&gt;`、...

Global site tag (gtag.js) - Google Analytics