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核心的东西了,出列上面列到的,还包括流、字符集的处理等。H2p-tool及源代码下载。
分享到:
相关推荐
H2数据库是一个开源的关系型数据库,采用Java语言编写,可以在多个...H2数据库在设计时支持良好的可扩展性和灵活性,可以满足不同应用场景下对于数据类型的需求,同时也为Java开发者提供了一种轻量级的数据库解决方案。
本文将深入探讨`tableExport`导出PDF时中文乱码的解决方案。 首先,我们要理解乱码的根源。中文字符在计算机中是以特定的编码方式存储的,如UTF-8。如果在导出过程中编码和解码不匹配,就会出现乱码。`tableExport`...
综上所述,硫氢化钠工艺处理技术是针对酸性尾气的一种高效解决方案,它不仅有助于环境保护,还能创造经济价值。通过精细的工艺流程和严格的控制措施,确保了产品品质和系统的安全性。在实际应用中,业主需提供必要的...
RML2PDF是一个由ReportLab提供的解决方案,用于生成和发布具有定制化、实时生成、大量产出和平台独立性的高质量报告。与现有的报告工具相比,它解决了传统报告工具局限于数据库报告,主要基于Windows平台,布局和...
【等效平衡】是化学反应平衡的一个重要概念,主要分为完全等效平衡、不完全等效平衡和特殊等效平衡三种类型...理解和掌握等效平衡的解题方法,有助于考生在技术考试中迅速找到问题的解决方案,并准确地进行计算和推理。
硅基智能数字人直播高级版是一种集成了多种先进技术和功能的产品,旨在为用户提供高效、便捷的直播解决方案。它不仅解决了传统直播中的许多痛点,还通过高度个性化的直播场景和智能化的互动功能,极大地提升了用户...
例如,使用了特定的哈希函数H1、H2、H3、H4、H5来加强数据的完整性,并可能利用了某种安全的密钥生成算法(如Cao Tian-jie方案),以及相应的消息加密和签名步骤来构建整个加密体系。 综上所述,改进的环认证加密...
【等效平衡】是化学平衡的一个重要概念,主要应用于可逆反应中,指的是在不同的起始条件下,经过化学反应,最终达到的平衡状态具有...理解并熟练运用这三个规律,能够帮助我们在解决实际问题时迅速找到正确的解决方案。
传统垃圾处理方法如填埋和焚烧带来了诸多环境问题,而磁化裂解技术的出现,为固体有机废物处理提供了新的视角和解决方案。 磁化裂解处理垃圾技术是一种新型环保节能的固体有机废物处理方法。该技术的核心在于通过...
西门子的MAXUM II色谱仪在监控生产过程、确保纯度要求、优化生产过程、提高产品质量和产量方面提供了最佳的解决方案。特别是在西门子Reactor(西门子反应器)中,化学气相沉积过程是生成高纯度多晶硅的关键步骤,...
随着全球能源结构转型和环境保护要求的日益严格,寻求高效、清洁的能源解决方案成为了当务之急。在这一背景下,生物质能作为可再生能源的一个重要分支,其有效利用显得尤为重要。本文将详细探讨园区“生物质燃气-...
全链路压测系统ForceBot是一种基于解决方案的压测系统,旨在解决线上系统的性能瓶颈问题。该系统可以模拟用户行为,生成大量的压测流量,来检测系统的承载能力。同时,ForceBot还可以对内部系统的接口进行检测,检查...
React Router 是一个用于构建 React 应用程序中的客户端路由解决方案。它旨在确保应用程序的用户界面与 URL 保持一致,使得开发人员能够轻松地管理和导航不同的页面或视图。 #### 二、基础知识 ##### 2.1 路由配置...
IMX906-AAJH5-C 是一款由索尼半导体解决方案公司生产的高性能图像传感器。该产品采用 10.240 毫米对角线尺寸(类型 1/1.56)的设计,拥有 5030 万像素的分辨率,并采用了方形像素阵列结构。作为一款专为彩色相机设计...
它不仅能够有效地解决多用户环境下的密钥管理难题,而且通过结合椭圆曲线的高效加密算法和基于标识的加密机制,提供了一种既安全又灵活的加密方案。随着信息技术的不断发展,CPK体制在未来的网络安全领域中有着广阔...
综上所述,MATLAB在变压器故障诊断中的应用不仅体现在利用三比值法进行初步判断,还涉及到BP神经网络的高级诊断技术,结合GUI界面,形成了一套完整的故障诊断解决方案,对于保障电力系统的安全运行具有重要意义。
这项技术涉及对炉内控制和臭氧尾部脱除技术的初步方案设计,为污染物脱除提供了新的解决方案。 研究中,利用并行计算的方法,结合详细基元反应,对二维反应射流进行了直接数值模拟。通过H2/N2火焰与加州大学伯克利...
【技术挑战与解决方案】 煤制甲醇工业面临的主要挑战包括:环保问题(如二氧化碳排放)、能源消耗、催化剂的稳定性和选择性、以及设备的耐腐蚀性。为应对这些挑战,科研机构和企业不断研发新型催化剂和优化工艺流程...
例如,二氧化硫(SO2)可以先与水反应生成亚硫酸(H2SO3),再进一步氧化成硫酸(H2SO4)。同样,盐酸(HCl)能与氧化铜(CuO)反应生成氯化铜(CuCl2),氯化铜再与氢氧化钡(Ba(OH)2)反应得到氯化钡(BaCl2)。...
Spring Security提供了全面的安全解决方案,包括认证和授权,以及防止常见的攻击,如CSRF攻击。 7. Spring Boot的测试支持 Spring Boot的测试支持模块提供了对编写单元测试和集成测试的支持。开发者可以使用spring-...