pdf生成的解决方案(H2p)之H2P技术细节

H2P在很多人看来是个令人激动的方案,而且javaei网站提供h2p文件资源又是 相当自然的一件事情,一想到h2p,我都很高兴,因为这个方案是我提出来的,尽 管实现h2p的技术很成熟。在这篇文章里,说一下实现h2p所涉及到的技术吧,既 有核心的j2se应用,又有开源框架的使用。

(1)dtd的应用,为了规范使用者正确的编辑h2p文件,我定义了h2p文件的 dtd,当然我还有一个奢望,希望能成为一种规范。

(2)使用根据dtd校验xml(h2p文件),h2p-tool需要解析xml(h2p文件)提 取url生成pdf并合并,不合法的xml文件肯定不能正确的生成pdf,所以必须对xml 文件进行校验。

(3)xml解析,编辑h2p,用JTree展示xml的树形结构,这一部分用的是dom解 析(具体的是JDom),获取书签的目录结构并构建书签的数据结构,这一部分用 的是SAX解析,并借助于Stack。保存xml文件用的是dom。

(4)swing的应用,h2p-tool编辑功能用的是swing,展示并编辑树形结构用 的是JTree

(5)C#组件,根据url生成单个的pdf,用的是c#组件,并在vs.net开发平台 上进行了简单的开发。Javaei提供的h2p文件通常包含几十条url,单就每条url生 成pdf也需要一点时间,何况是几十条,所以运用多线程是必须的方式,研究了一 下c#的多线程(c#的多线程方式也很有意思,感觉比java的简单),可是别人的 组件在多线程下表现欠佳,无赖之下,只好还是采用单线程。本想用jni把c#的调 用封装起来,但经过研究,据说比较麻烦,就放弃了,所以采用简单的办法,用 批处理来调用。

(6)iText的应用,生成单个pdf页面以及合并pdf生成书签用的是iText。在 合并的时候,也研究过另一个框架就是pdfbox。IText确实强悍,理论上,应用 iText可以实现任意效果的输出,应该可以实现浏览器的效果,但比较麻烦。 iText在生成书签这一块,做得相当漂亮,书签可以指向任意一个页面的任意部分 ,还可以设置书签对应页面的打开效果,对书签的开发也很便利,直接构造书签 的树形数据结构我认为是最简单的,iText还支持用xml描述书签的结构。

(7)Classloader的应用,h2p-tool的运行依赖于很多的jar包,通常我们开 发的时候,都是把jar包放在指定的目录,应用服务器会去加载依赖的jar包。在 h2p-tool中,需要自己处理jar包。因为这是提供给用户使用的工具,不应要求使 用者去配置除了jdk环境变量以外的变量。所以解决jar包加载的问题通常的办法 是在主类(带有main方法的类)所在jar包里的Manifest.mf文件里写上jar包的相 对路径。这种办法不太灵活,所以在h2p-tool中,对类加载进行了改写,使其自 动加载指定目录下的jar包。

(8)jvm参数的应用,因为要合并的pdf很多,再合并的时候会占用大量内存 ,很容易out of memery,所以在批处理文件里,需要配置适当的jvm参数,主要 是两个:-Xmx512m -Xms512m,这两个参数的意义这里不再赘述,网上有很多的。

总结一下,实现h2p-tool的技术细节貌似很多,实则很少,除了JDOm和iText ,再就是j2se核心的东西了,出列上面列到的,还包括流、字符集的处理等。

时间: 2024-11-08 18:36:13

pdf生成的解决方案(H2p)之H2P技术细节的相关文章

pdf生成的解决方案(H2p)之H2P展望

<根据批量URL生成有书签的pdf文档的解决方案>一文作为一个完整的解决方 案,主要有四个要点 (1)详细描述了解决方案的思路, (2)提出了一种描述URL的xml文件,称之为h2p文件 (3)根据h2p文件生成pdf文档的工具称为h2p-tool,同时h2p-tool还能对h2p 文件进行编辑,从而制作自己的pdf电子书. (4)h2p文件是该解决方案的资源文件,收集url是件费时费力的事情,所以 该解决方案还提供了下载h2p文件的链接 H2p是我自己定义的一种xml格式,我私下里是希望这种

PHP使用imagick读取PDF生成png缩略图的两种方法

 这篇文章主要介绍了PHP使用imagick读取PDF第一页生成png缩略图的两种方法,使用了PHP扩展php_imagick,需要的朋友可以参考下 一.ImageMagick是什么 ImageMagick是一套功能强大.稳定而且免费的工具集和开发包,可以用来读.写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式.利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大

PHP使用imagick读取PDF生成png缩略图的两种方法_php实例

一.ImageMagick是什么ImageMagick是一套功能强大.稳定而且免费的工具集和开发包,可以用来读.写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式.利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小.旋转.锐化.减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存.二.php_imagick什么一个可以供PHP调用ImageMagick功

php利用Imagick把pdf生成png缩略图

php_imagick什么 一个可以供PHP调用ImageMagick功能的PHP扩展.使用这个扩展可以使PHP具备和ImageMagick相同的功能. ImageMagick是一套功能强大.稳定而且免费的工具集和开发包,可以用来读.写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式.利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小.旋转.锐化.减色或增加特效

使用itextsharp.dll开发PDF生成的奇怪问题

问题描述 我要实现的就是一个点击一个链接,弹出一个下载对话框,里面有一个open,save,cancel按钮,但是问题出现的很奇怪,就是,如果我点击open打开生成的PDF的时候,Adobereader8就提示找不到文档的错误,如果点击save以后,再打开是没有问题的.于是我再自己家里的机器做了一个Demo,点击打开是可以打开文档的,好郁闷,请问有谁碰见过这个问题,谢谢 解决方案 解决方案二:真是奇怪的问题,最近也遇到pdf的问题,如何打开pdf文件并在里面写字itextsharp.dll找了半

静态页转换平台(StaticPol)-静态页生成终极解决方案

为什么要生成静态页? 这个问题咱们就不多说了,他的优点只有一个,大大提高网站性能,对于数据量大.访问量大的网站不采用静态页输出的解决方案,恐怕真受不了了.缺点就不说了,一 大堆....不过单这一个优点就值得我们研究一番.下面咱们讨论一下静态页生成方案的常规处理方式和 StaticPol 灵活的处理方式,对他们进行一个比较. 说他是一个平台的理由: 常规方式:在每个程序中为静态页生成写相应的模块(程序),执行对应的更新,而且一般都是手动更新(首页.分类页.信息页),好麻烦,即使是定时更新,也要写

phonegap教程使用jspdf库在应用中生成pdf文件(pdf生成方法)_Android

首先在命令行创建一个PhoneGap工程 复制代码 代码如下: phonegap create . "jspdf.sample" "JSPDF App"phonegap local plugin add org.apache.cordova.filephonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git 然后,下载JSPDF代码 down

phonegap教程使用jspdf库在应用中生成pdf文件(pdf生成方法)

首先在命令行创建一个PhoneGap工程 复制代码 代码如下:phonegap create . "jspdf.sample" "JSPDF App"phonegap local plugin add org.apache.cordova.filephonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git 然后,下载JSPDF代码 downl

关于PDF生成jpg 的问题

问题描述 把PDF文件装换成jpg文件时出现的问题一张pdf转成JPG格式文件没有问题可是多个PDF装换成Jpg的时候有时候报错有时候不报,报错好像很随机,有哪位朋友遇到过这样的问题,烦请解答一下!!!!!!!!以下是报错信息:com.sun.pdfview.decrypt.PDFAuthenticationFailureException:Passwordfailedauthenticationforbothowneranduserpasswordatcom.sun.pdfview.decry