`

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来实现的代码:



?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

public boolean convertHtmlToPdf(String inputFile, String outputFile)
    throws Exception {
        
        OutputStream os = new FileOutputStream(outputFile);    
        ITextRenderer renderer = new ITextRenderer();    
        String url = new File(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页面。页面的顶上必须是这样的格式:



?

1
2

<!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.要用到图片的地方写相对路径的形式,比如:



?

1

<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);

上面的方法是添加了宋体。也可以添加其他字体。

以上就是解决方案。
分享到:
评论

相关推荐

    免费PDF控件Spire.PDF

    免费Spire.PDF for .NET 是一款由e-iceblue公司开发的专业性的PDF文档创建组件。它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档。Spire.PDF for .NET不仅可以...

    java根据PDF模板自动生成PDF文件

    用途:根据PDF模板生成PDF文件,将数据库查询的数据插入到模板指定未知,然后生成新的PDF文件 原理: 代码说明:exprotPDF_Main 为主文件。调用了outpdf1的两个文件的方法。outpdf1里的方法,是通过outpdf2345678这...

    基于HTML的PDF展示 pdf.js 兼容旧版浏览器

    pdf.js 是一个技术原型主要用于在 HTML5 平台上展示...我们的目标是创建一个通用的,基于标准的网络平台解析和渲染PDF,并最终释放出的PDF阅读器的扩展。 示例地址: http://mozilla.github.com/pdf.js/web/viewer.html

    免费版 PDF Java组件_Free Spire.PDF for Java 1.1.0

    Free Spire.PDF for JAVA 是一个 100% 免费的 PDF API, 在 JAVA 应用程序上调用该组件即可读取,写入和保存 PDF 文档,无需安装 Adobe Acrobat。使用此 JAVA PDF 组件,开发人员可以在 JAVA 应用程序(J2SE 和 J2EE...

    PDF文件 阅读控件 (VeryPDF PDFView OCX)

    PDF阅读控件示例(VeryPDF PDFView OCX) =================================== 推荐一个阅读PDF格式文件的控件最新版,带完美注册使用。打开PDF速度蛮快,支持中文。支持字符 串查找(好像还不支持中文搜索 :-&lt;)....

    免费版.NET PDF组件_Free Spire.PDF for .NET 4.3

    Free Spire.PDF for .NET 是 Spire.PDF for .NET 的免费版本,无需购买即可用于个人或商业用途。使用该组件,程序员可以 在.NET 程序中创建、读取、写入、编辑和操作 PDF 文档。这个控件能支持的功能十分全面,例如...

    JPG2PDF V2.6含注册码

     JPG转PDF转换器支持的转换有JPG转PDF,TIF转PDF,BMP转PDF,GIF转PDF,PNG转PDF,PSD转PDF等多达几十种图片格 式转PDF的转换。  拥有这款PDF转换器,您相当于有了JPG转PDF转换器,TIF转PDF转换器,BMP转PDF转换...

    Free Spire.PDF for JAVA

    Free Spire.PDF for JAVA可以支持许多功能,例如从PDF中提取文本,在PDF文档中绘制文本/图像/形状,创建和填充表单域,创建 PDF/A-1,添加和验证 PDF 数字签名。 此外,Free Spire.PDF for JAVA 支持将PDF 转换为...

    pdfbox 提取 pdf文件中的图片

    PDFBox是一个开源的可以操作PDF文档的Java PDF类库。它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。 它具有以下特性: 1.将一个PDF文档转换输出为一个文本文件。 2.可以从文本文件创建一个PDF文档。 ...

    福昕PDF套件 5.0.4破解版

    高性能 ——以超过其它PDF工具3倍的速度把200多种常用办公文件类型转换为PDF文件,并且还能一次选择多个文件进行PDF文件转换。 一键转换 ——一键点击,即刻把Microsoft(微软)办公软件中的Word,PowerPoint?和...

    PDF-XChange_Viewer4.195+注册码

    PDF-Xchange是一款全面兼容PDF格式的PDF文件制作和浏览软件。它分为两个部分:PDF-Xchange Pro和PDF-XChange Viewer Pro。前者是一个转换平台,只要添加各种类型的文件文件,就可以转化为PDF,支持Word、Excel、图片...

    PDF.js 解析PDF文件demo

    pdf.js 解析PDF文件DEMO 下载这个DEMO 轻松搞定在线解析PDF文件 支持翻页浏览 pdf.js 是一个技术原型主要用于在 HTML5 平台上展示 PDF 文档,无需任何本地技术支持 注意:只兼容支持HTML5的浏览器

    C#打印PDF的类库 PdfPrintingNet 无水印破解版

    C#打印PDF的类库 PdfPrintingNet 无水印破解版 直接驱动打印机,打印速度快(响应速度 )。可以用作快递标签打印等 代码很简单。PdfPrint后面两个参数是用户名和注册码,原版如果注册码不正确会有水印。现在可以...

    华为全套设计规范PDF文档

    01.华为的世界.pdf 02.华为内部C贵言培训资料.pdf 03.华为EMC资料.PDF 04.华为PCB的EMC设计指南.pdf 05.华为模电教程1.PDF 06.华为模电教程2.PDF 07.华为模拟电路设计全册.pdf 08.华为Hi3515(ARM9)之高速电路硬件...

    poi创建word、生成html、itext将html转换成pdf。pd4ml将jsp转成pdf

    1.用户导入word生成pdf -首先导入word的时候读取word里面的全部内容。调用(ReadAndWriteDoc)然后将内容 传送到createPdf里面生成pdf。导入的时候读取采用poi /生成的时候采用的是itext 2.通过读取数据库...

    微软面试100题系列之高清完整版PDF文档[带目录+标签]by_July

    闲不多说,眼下九月正是校招,各种笔试,面试进行火热的时节,希望此份微软面试100题系列的PDF文档能给正在找工作的朋友助一臂之力! 如果读者发现了本系列任何一题的答案有问题,错误,bug,恳请随时不吝指正,...

    单片机C语言轻松入门.pdf单片机C语言轻松入门.pdf

    单片机C语言轻松入门.pdf单片机C语言轻松入门.pdf单片机C语言轻松入门.pdf单片机C语言轻松入门.pdf单片机C语言轻松入门.pdf单片机C语言轻松入门.pdf单片机C语言轻松入门.pdf单片机C语言轻松入门.pdf单片机C语言轻松...

    非常好用的PDF工具,PDF合并,自动生成PDF书签

    非常好用的PDF工具,合并PDF,自动生成PDF书签

Global site tag (gtag.js) - Google Analytics