`
huangronaldo
  • 浏览: 222929 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java HTML直接导出PDF

阅读更多

Java  HTML直接导出PDF

对于java中如何从html中直接导出pdf,有很多的开源代码,这里个人用itext转。

首先需要的包有:core-renderer-1.0.jar

core-renderer-R8pre1.jar

core-renderer.jar

iText-2.0.8.jar

jtidy-4aug2000r7-dev.jar

Tidy.jar

iTextAsian.jar

java代码的话就比较简单了。具体是先用Tidy将html转换为xhtml,将xhtml转换为其它各种格式的。虽然在转化到pdf时也是用的iText。代码如下:

	//struts1.x中
else if("Html2Pdf".equalsIgnoreCase(action)){
	exportPdfFile("http://localhost:8080/jsp/test.jsp");
	return null;
}

// 导出pdf add by huangt 2012.6.1
	public File exportPdfFile(String urlStr) throws BaseException {
		// String outputFile = this.fileRoot + "/" +
		// ServiceConstants.DIR_PUBINFO_EXPORT + "/" + getFileName() + ".pdf";
		String outputFile = "d:/test3.pdf";
		OutputStream os;
		try {
			os = new FileOutputStream(outputFile);

			ITextRenderer renderer = new ITextRenderer();

			String str = getHtmlFile(urlStr);
			renderer.setDocumentFromString(str);
			ITextFontResolver fontResolver = renderer.getFontResolver();
			
			fontResolver.addFont("C:/WINDOWS/Fonts/SimSun.ttc",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字
			fontResolver.addFont("C:/WINDOWS/Fonts/Arial.ttf",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字
			renderer.layout();

			renderer.createPDF(os);

			System.out.println("转换成功!");
			os.flush();
			os.close();
			return new File(outputFile);
		} catch (FileNotFoundException e) {
			// logger.error("不存在文件!" + e.getMessage());
			throw new BaseException(e);
		} catch (DocumentException e) {
			// logger.error("生成pdf时出错了!" + e.getMessage());
			throw new BaseException(e);
		} catch (IOException e) {
			// logger.error("pdf出错了!" + e.getMessage());
			throw new BaseException(e);
		}

	}

	// 读取页面内容 add by huangt 2012.6.1
	public String getHtmlFile(String urlStr) throws BaseException {
		URL url;
		try {
			if (urlStr.indexOf("?") != -1) {
				urlStr = urlStr + "&locale="
						+ LocaleContextHolder.getLocale().toString();
			} else {
				urlStr = urlStr + "?locale="
						+ LocaleContextHolder.getLocale().toString();
			}
			url = new URL(urlStr);

			URLConnection uc = url.openConnection();
			InputStream is = uc.getInputStream();
			
			Tidy tidy = new Tidy();

			OutputStream os2 = new ByteArrayOutputStream();
			tidy.setXHTML(true); // 设定输出为xhtml(还可以输出为xml)
			tidy.setCharEncoding(Configuration.UTF8); // 设定编码以正常转换中文
			tidy.setTidyMark(false); // 不设置它会在输出的文件中给加条meta信息
			tidy.setXmlPi(true); // 让它加上<?xml version="1.0"?>
			tidy.setIndentContent(true); // 缩进,可以省略,只是让格式看起来漂亮一些
			tidy.parse(is, os2);

			is.close();

			// 解决乱码 --将转换后的输出流重新读取改变编码
			String temp;
			StringBuffer sb = new StringBuffer();
			BufferedReader in = new BufferedReader(new InputStreamReader(
					new ByteArrayInputStream(
							((ByteArrayOutputStream) os2).toByteArray()),
					"utf-8"));
			while ((temp = in.readLine()) != null) {
				sb.append(temp);
			}

			return sb.toString();
		} catch (IOException e) {
			// logger.error("读取客户端网页文本信息时出错了" + e.getMessage());
			throw new BaseException(e);
		}

	}

 

为了解决包的问题,加上Maven <!-- pdf导出 -->

			<dependency>
				<groupId>com.lowagie</groupId>
				<artifactId>itext</artifactId>
				<version>2.1.7</version>
			</dependency>
			<dependency>
				<groupId>org.xhtmlrenderer.flyingsaucer</groupId>
				<artifactId>pdf-renderer</artifactId>
				<version>1.0</version>
			</dependency>
			<dependency>
				<groupId>jtidy</groupId>
				<artifactId>jtidy</artifactId>
				<version>4aug2000r7-dev</version>
				<type>jar</type>
				<scope>compile</scope>
			</dependency>
			<dependency>
				<groupId>net.sf.barcode4j</groupId>
				<artifactId>barcode4j-light</artifactId>
				<version>2.0</version>
			</dependency>
			<dependency>
				<groupId>avalon-framework</groupId>
				<artifactId>avalon-framework-impl</artifactId>
				<version>4.2.0</version>
			</dependency>
			<!-- pdf -->
 

另外附上 稍微复杂的PDFUtils.java文件,由于没时间就不做整理解释了!见下载附件!

 

  • Tidy.jar (133.7 KB)
  • 下载次数: 1505
分享到:
评论
28 楼 哇哈哈1 2017-04-11  
楼主 你好  看了你的文章顿时收益颇深   可以提问吗?

html转pdf的时候如果html过大  怎么让pdf分页?
27 楼 大海你好 2016-07-15  
错误:“Stream closed”楼主,没找到哪里有哦错
26 楼 微站题 2016-01-20  
能给我发下jar包吗,有3个没有下载到 297196894@qq.com   先谢谢了
25 楼 yuwei35kd 2014-11-06  
PDFUtil.java中有的类引用不到
24 楼 liuning_89 2014-04-10  
515244259@qq.com 求例子
23 楼 衞酆夼 2014-04-07  
楼主,能发个例子看看嘛,谢谢啦,2833297668@qq.com
22 楼 lezi2012 2014-02-17  
建议使用 wkhtmltopdf  这个工具,google 代码上有下载,效果要好的多
21 楼 lkx9020 2013-12-30  
楼主能将这个程序的源码发给我吗?745135430@qq.com,谢谢
20 楼 kingboyguo 2013-09-01  
能把这个项目发给我吗,非常感谢。276399697@qq.com
19 楼 zy3zzz3yyy 2013-08-30  
您好!感觉非常给力,能把一个比较完整的例子发给我吗?非常感谢!1627628543@qq.com
18 楼 lijunxijava 2013-08-05  
您好,能把完整例子发给我一下参考吗,谢谢!871483756@qq.com
17 楼 89402437 2013-05-23  
能把完整例子发给我下吗,谢谢!352deqyiyt@163.com
使用这个例子不能改善text-align: right;的问题
16 楼 lku1314 2013-04-24  
lz  请问documentException 是在那个包啊 ? 我换了几个 core-renderer.jar 都是缺失这个

这个异常
15 楼 daichangfu 2013-04-07  
不能用啊。不显示中文。
14 楼 huangronaldo 2013-02-25  
hyk821 写道
楼主 能发下该项目给我吗?723427671@qq.com


项目 很大,耦合了很多很多 业务逻辑, 很难分离出来 。不好意思了
13 楼 hyk821 2013-01-23  
楼主 能发下该项目给我吗?723427671@qq.com
12 楼 huangronaldo 2012-10-30  
dxl525183697 写道
问一下,为什么我的 程序里renderer没有setDocumentFromString(str);方法,是不是依赖包的问题,问题是我的依赖包都是从这边下的

如果没有有这个方法的话,是renderer这个包有问题
可另外下载
11 楼 dxl525183697 2012-10-25  
问一下,为什么我的 程序里renderer没有setDocumentFromString(str);方法,是不是依赖包的问题,问题是我的依赖包都是从这边下的
10 楼 cctvcctv127 2012-10-17  
我也要  发我cctv----127@163.com上 非常感谢
9 楼 mazheng34340237 2012-09-23  
我也要 工程,34340237@QQ.com  非常感谢

相关推荐

    Java HTML直接导出PDF需要的包

    Java HTML直接导出PDF需要的包有:core-renderer-1.0.jar core-renderer-R8pre1.jar core-renderer.jar iText-2.0.8.jar jtidy-4aug2000r7-dev.jar Tidy.jar iTextAsian.jar

    java根据模板导出PDF详细教程(包含统计图)

    本文将深入探讨如何使用Java来根据模板导出包含统计图的PDF文档。主要涉及的技术包括iText库、FreeMarker模板引擎以及可能的数据可视化工具。 首先,iText是一个强大的Java库,专门用于创建和操作PDF文档。它提供了...

    java导出docx导出pdf

    Java编程语言在处理文档转换方面提供了强大的支持,...综上所述,"java导出docx导出pdf"的项目提供了一个Java解决方案,通过利用Apache POI和iText库,实现了从Docx到PDF的快速转换,适用于各种需要文档转换的场景。

    java将页面导出PDF.zip

    在这个案例中,"将页面导出PDF.zip"文件可能包含了使用其中一个库的示例代码,特别是Flying Saucer,因为它擅长将HTML内容转换为PDF。 Flying Saucer是一个强大的Java库,它能够解析HTML并将其渲染为PDF、XPS或其他...

    java使用itext导出PDF文本绝对定位(实现方法)

    java使用iText导出PDF文本绝对定位(实现方法) iText是一个流行的Java类库,用于生成PDF文档。下面我们将探讨如何使用iText在Java中导出PDF文本,并实现绝对定位。 iText简介 iText是一个开源的Java类库,用于...

    java实现导出pdf文件

    在Java开发中,导出PDF文件是一项常见的需求,特别是在生成报表、文档或发票等场景下。iText是一个强大的Java库,专门用于创建和修改PDF文档。在这个过程中,我们将深入探讨如何使用iText库来实现从网页(JSP)导出...

    java根据模板导出PDF详细教程(包含统计图).rar

    在本文档中,我们将探讨如何使用Java来根据模板导出包含统计图的PDF文档。主要涉及的技术包括iText库、FreeMarker模板引擎以及可能的数据处理和图形生成。 首先,iText是一个强大的Java库,用于创建和修改PDF文档。...

    Java导出pdf 利用模板导出

    在Java开发中,导出PDF是一项常见的需求,例如生成报告、报表或者合同等。这个话题主要涉及Java处理PDF文档的技术,以及如何利用模板来高效地生成PDF内容。在这个场景下,我们可以使用开源库如iText或Apache PDFBox...

    JAVA导出PDF文件所需相关配置文件

    在Java开发中,导出PDF文件是一项常见的任务,尤其在报表生成、文档创建等领域。PDF(Portable Document Format)因其跨平台、格式保持等特性而被广泛使用。本篇将详细介绍在Java环境下,导出PDF所需的配置文件以及...

    java导出pdf.zip

    Java导出PDF是一种常见的技术需求,特别是在开发报告生成、数据可视化或者文档呈现的场景中。在Java中,我们可以使用各种库来实现将数据导出为PDF格式的功能。本篇文章将详细探讨这一主题。 首先,我们需要了解PDF...

    java导出pdf文件

    在Java编程环境中,导出PDF(Portable Document Format)文件是一项常见的任务,这通常涉及到将数据、文本或图形从应用程序转换成这种广泛支持的格式,以便于分发和打印。PDF文件格式具有跨平台兼容性,可以保留原始...

    JasperReport与Java程序,导出不同格式的报表,包括pdf,excel,html,报表打印等功能

    4. **导出报表**:JasperExportManager类提供了多种导出方法,如`exportReportToPdf()`, `exportReportToHtmlFile()`, 和 `exportReportToXlsFile()`,分别用于导出为PDF、HTML和Excel格式。这些方法接收JasperPrint...

    java实现HTML页面转PDF亲测好用

    你也可以考虑使用专门为Java设计的HTML转PDF库,如PDFreactor、Flying Saucer或HtmlUnit,它们通常提供更丰富的API和更好的集成。 在实际项目中,你可能需要处理更复杂的情况,比如设置PDF页面大小、自定义CSS样式...

    java+ireport 例子 导出html以及pdf

    java+ireport 例子 导出html以及pdf 可以直接运行,使用的是mysql数据库 DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `...

    freemark模板导出PDF

    本篇文章将详细讲解如何利用FreeMarker模板来导出PDF文件。 1. **FreeMarker基本概念** FreeMarker是Java语言的一个模板引擎,它与Spring、Struts等框架结合紧密,允许开发者将逻辑代码与展示层分离,通过模板文件...

    JAVA使用itextpdf实现HTML转PDF

    总之,使用iTextPDF库在Java中实现HTML到PDF的转换是一项实用的技能,但需要注意库对HTML和CSS的支持限制。根据实际需求,可能需要对HTML源码进行调整,或者考虑使用其他兼容性更强的库来实现更丰富的转换效果。

    easypoi的使用demo,包含Excel模板导出,html导出Excel,Excel导出pdf等

    在标题和描述中提到的几个关键功能,我们将详细探讨如何使用Easy POI进行Excel模板导出、HTML导出为Excel以及Excel导出为PDF。 1. Excel模板导出: Easy POI允许开发者使用预定义的Excel模板来导出数据。在模板中...

    PD4ML 实测Java将HTML导出为PDF 成功解决中文乱码问题

    PD4ML是一个Java库,专门用于将HTML内容转换为高质量的PDF文档。本篇将深入探讨如何使用PD4ML实现在Java环境中处理中文乱码问题,并提供相关文件的背景和用途。 首先,我们要理解为何会出现中文乱码。在处理非ASCII...

    thymeleaf框架通过java渲染html生成pdf

    在这个场景中,我们探讨如何利用Thymeleaf与Java技术相结合,生成HTML并进一步转换为PDF文件,以便在浏览器中预览或者下载。这个过程通常应用于生成报告、发票或其他需要以结构化文档形式呈现的数据。 首先,让我们...

Global site tag (gtag.js) - Google Analytics