Java实现HTML页面转PDF解决方案(转)
最近在工作中遇到了一个很囧的事情。要把HTML页面转换成PDF或者tiff图片等其他形式,目前tiff还是一头雾水,如果各位大师有真的可行的想法(不要是别人那边抄的,百度最近搜索的质量严重的打击了我对国货的信心。)希望能够告诉我,先谢了。
言归正传。所以,我就做了把HTML转换成PDF的形式。目前可以完美支持一比一转换,下面就把我的解决方案贴出来。
首先,当然是找到能够解析PDF的完美组件,百度和谷歌不约而同的告诉我们。IText是王道。而目前开源的组件中,Itext的确是一个First Choice,如果各位单纯是做把图片转成PDF或者自己写了Velocity或者FreeMarker模板生成了HTML是非常推荐直接用Itext来进行的。而如果,大家像我这样已经有前人写好了HTML页面或者懒得写FreeMarker模板的话。可以直接看下一段。
由于他们已经写好了HTML页面,而且显示已经很完美了。那我要做的就是能完美解析HTML+CSS的PDF生成工具。这时候flying-saucer进入了我的选择范围中。
http://code.google.com/p/flying-saucer/
上面是网址,这个工具托管在GoogleCode上面,作者做他们能够做下面的工作:
Flying Saucer takes XML or XHTML and applies CSS 2.1-compliant stylesheets to it, in order to render to PDF (via iText), images, and on-screen using Swing or SWT。
不难看出工作原理,就是解析XML或者XHTML并且包括css样式表,并且用Swing或者SWT的组件生成PDF的功能。这解决了页面的显示问题。IText自身的一个很严重的问题就是解析CSS有很大的问题。而这个解决了。下面就是用Flying Saucer来实现的代码:
public booleanconvertHtmlToPdf(String inputFile, String outputFile)throwsException {OutputStream os= newFileOutputStream(outputFile); ITextRenderer renderer= newITextRenderer(); String url= newFile(inputFile).toURI().toURL().toString(); renderer.setDocument(url);//解决中文支持问题ITextFontResolver fontResolver =renderer.getFontResolver(); fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//解决图片的相对路径问题renderer.getSharedContext().setBaseURL("file:/D:/");renderer.layout(); renderer.createPDF(os); os.flush();os.close();return true;}
上面这段代码是这样的,输入一个HTML地址URL = inputFile,输入一个要输出的地址,就可以在输出的PDF地址中生成这个PDF。
注意事项:
1.输入的HTML页面必须是标准的XHTML页面。页面的顶上必须是这样的格式:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
并且HTML页面的语法必须是非常严谨的,所有标签都必须闭合等等(由于flying-Saucer做了XML解析的工作,不严谨会报错的。),这是对页面的第一个要求。
2.要用到图片的地方写相对路径的形式,比如:
<img src="a.jpg" alt="323" width="252" height="80" />
而它的图片位置则必须在Java代码中指定。
renderer.getSharedContext().setBaseURL("file:/D:/");
也有另一种方法就是直接在<img>标签中写绝对路径。
3.Flying-Saucer在解析tiff格式的图片的时候会报错。具体原因我还没找到。希望大家能够指点我。
4.如果在页面中有中文字体的话。必须在HTML代码中的样式中写上某种字体的css,并且必须是用英文的,然后在Java代码中写上对应的文件位置。
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
上面的方法是添加了宋体。也可以添加其他字体。
以上就是解决方案。
下面给出这几个包的下载地址。大家可以直接下载。
下载地址,猛点我吧!
转自:http://blog.csdn.net/jasonchris/article/details/7705631
转载于:https://www.cnblogs.com/licomeback/articles/3056492.html
Java实现HTML页面转PDF解决方案(转)相关推荐
- java实现html页面转pdf解决方案_[Java教程]纯js实现html转pdf
[Java教程]纯js实现html转pdf 0 2017-02-16 00:00:30 项目开发中遇到了一个变态需求,需要把一整个页面导出为pdf格式,而且要保留页面上的所有的表格.svg图片和样式. ...
- java网页保存pdf_JavaScript+Java实现HTML页面转为PDF文件保存的方法
JavaScript+Java实现HTML页面转为PDF文件保存的方法 发布于 2017-02-27 09:58:50 | 160 次阅读 | 评论: 0 | 来源: 网友投递 JavaScript客 ...
- java 网页保存为pdf文件怎么打开方式_js相关:JavaScript+Java实现HTML页面转为PDF文件保存的方法...
js相关:JavaScript+Java实现HTML页面转为PDF文件保存的方法 发布于 2020-8-12| 复制链接 借助iText这个Java库,我们可以将HTML文件保存为图片文件进而转换成P ...
- (Java实现)HTML页面转PDF解决方案
最近在工作中遇到了一个很囧的事情.要把HTML页面转换成PDF或者tiff图片等其他形式,目前tiff还是一头雾水,如果各位大师有真的可行的想法(不要是别人那边抄的,百度最近搜索的质量严重的打击了我对 ...
- java将HTML文件转化为pdf文件,如何使用Java将HTML网页转换为PDF文件
我一直在互联网上搜索如何使用Java将HTML页面转换为PDF文件.我发现了很多指针,简而言之,它们不起作用或难以实现.我也下载了一个商业产品,pdf4ml;该API是我很乐意与之合作的,除了当我在维 ...
- java从页面下载pdf文件到本地
java从页面下载pdf文件,strtus2为例,其他框架语法大致一样 直接上代码 这边我传了个参数 从数据库中查出来文件存在服务器的相对路径 页面 <button class="la ...
- flyingsaucer转换多个html,java - 使用FlyingSaucer将包含阿拉伯字符的HTML页面转换为PDF - 堆栈内存溢出...
我想使用FlyingSaucer将包含阿拉伯字符的HTML页面转换为PDF文件,但生成的PDF不包含组合字符并向后打印输出. HTML: جميع الحقوق Java摘录: String inpu ...
- Puppeteer将动态html页面生成pdf(终极解决方案)
开通掘金好几年一直没有写文章,近一年经常有朋友问我将动态的h5/vue/react/原生js 页面转成pdf,我觉得有必要写个文章,给大家提供一套经过多个项目验证的完整解决方案的思路:觉得有用可以点赞 ...
- java jsp导出pdf文件_JSP页面导出PDF格式文件
JSP页面导出PDF格式文件基本在前端页面可以全部完成 添加下载链接的点击事件 var downPdf = document.getElementById("downLoad"); ...
最新文章
- 【Transact-SQL】SQL Server自动把left join自动转化为inner join、以及关联时的数据重复问题...
- 【iOS - 周总结】开发中遇到的小知识点(2018.12.10-2018.12.15)
- 指标的检测及检测仪器
- Node-webpack基本使用和详细案例
- select * 与 count(*)数量不一致_技术分享 | MySQL:count(*)、count(字段) 实现上区别
- 精选 | 2017年11月R新包推荐
- 在双屏软件中,PPT自定义动画注意事项
- 千万级用户的大型网站,应该如何设计其高并发架构?(彩蛋)
- cookie和session机制之间的区别与联系
- 微软手机远程桌面使用
- DSP 6678的NETCP
- 计算机四级 网络工程师 考过指南
- 可能是最全的h5唤起App方案
- 外资餐饮连锁或因产品质量影响销售额
- 如何用C语言画立体几何图形,立体几何图形公式大全
- matlab fscanf
- 软件 黑苹果盒盖不休眠_怎么解决苹果电脑合盖自动休眠问题?
- Android逐帧动画——让图片动起来
- 【算法leetcode】1557. 可以到达所有点的最少点数目(rust和go我都要)
- 前端讲义64_AngularJS鼠标与键盘事件有关指令
热门文章
- redis 端口_「建议收藏」手把手教你搭建redis集群
- 天龙八部手游linux源码,天龙八部手游登录源码
- python 共享内存_37. Python 多进程锁 多进程共享内存
- java catch自定义异常_java异常类-java自定义异常-嗨客网
- Redis入门,Redis的安装
- 轻松理解条件随机场(CRF)
- The constructor someMethod() is not accessible due to restriction on required library
- 15.try...except...finally
- 创建一个显示所有预定义系统颜色的ListBox
- Vue编写动态组件实践(render函数的使用心得)