H2p完善——h2p文件合并和用xsl解析h2p文件

自从javaei网站推出h2p以来,得到了很多人的支持和鼓励,也给出了很多宝贵意见,再次深表谢意。

这些意见主要是三个方面的问题。第一:为什么要生成pdf;第二:h2p文件分成两个,比较繁琐,为什么不合成一个;第三:h2p-toolc#java实现,用起来不够简单,需要进一步完善。这三方面的意见提得非常好,在设计h2p之前,我其实是深思熟虑过的。

为什么要转换成pdf?回答这个问题很简单也很难?我就简单的说一下,首先pdf已成为广泛支持的具有丰富表现力的文档格式;其次pdf是聚合、收藏网络文章的最便利的文档格式,因为其强大的书签功能和瘦小的体积;还有很多,不一一列举了。说到底,h2p就是一个把网络文章整理成pdf的一个完整的解决方案,有些网站也有制作电子书的功能,但是h2p是一个更加通用的解决方案。

关于h2p文件的问题,分成两个文件来描述的确不方便,现在回想起来,当时分成两个文件是考虑的过多了,合并成一个文件迫在眉睫,而这是本文的主要内容。

合并后的h2p文件其后缀为.h2p.xml,主要描述url的信息和url的层次结构,h2p-tool根据h2p文件生成有书签的pdf文档。合并后,对h2p文件的操作变得简单,还可以通过xsl直接展示url的层次结构,而且合作网站对h2p的支持也将变得简单。

经过慎重考虑和仔细设计,h2p文件的一个例子如下:

 1  <? xml version="1.0" encoding="UTF-8" ?>
 2  <? xml-stylesheet type="text/xsl" href="http://www.javaei.com/content/h2p/h2p.xsl" ?>
 3  <! DOCTYPE book PUBLIC "-//JavaEI/JavaEI h2p Configuration DTD//CN" "http://www.javaei.com/dtd/javaei-h2p.dtd"  >
 4  < book  name ="我的PDF书" >
 5       < chapter  name ="163" >
 6           < chapter  name ="163新闻" >
 7               < href  id ="11111" > <![CDATA[ http://news.163.com ]]> </ href >
 8           </ chapter >
 9           < chapter  name ="163体育" >
10               < href  id ="2222" > <![CDATA[ http://sports.163.com ]]> </ href >
11           </ chapter >
12       </ chapter >
13       < chapter  name ="sohu" >
14           < href  id ="333" > <![CDATA[ http://www.sohu.com ]]> </ href >
15           < chapter  name ="sohu新闻" >
16               < href  id ="444" > <![CDATA[ http://news.sohu.com ]]> </ href >
17           </ chapter >
18       </ chapter >
19  </ book >
20 

对应的dtd如下:

1  <! ELEMENT book (chapter+) >
2  <! ATTLIST book      name   CDATA #REQUIRED >
3  <! ELEMENT chapter (href?,chapter*) >
4  <! ATTLIST chapter      name  CDATA  #REQUIRED >
5  <! ELEMENT href (#PCDATA) >
6  <! ATTLIST href      id  CDATA  #REQUIRED >
7 

利用xsl对该样例文件的解析效果如图:



层次结构的深度是没有限制的,h2pxsl实现了对xml的解析和树节点的构造,如果对这方面的问题感兴趣的可以参考我这个xsl。合作网站可以提供自己的xslXsl解析xml生成树的核心代码如下:

 1       < xsl:template  match ="//chapter" >
 2           < xsl:for-each  select ="." >
 3                   < li >
 4                       < img  class ="nodeimg" >
 5                       < xsl:choose >
 6                       < xsl:when  test ="./chapter" >
 7                           < xsl:attribute  name ="src" > http://www.javaei.com/res/images/closed.gif </ xsl:attribute >
 8                           < xsl:attribute  name ="onclick" > clicknode(this) </ xsl:attribute >
 9                       </ xsl:when >
10                       < xsl:otherwise >
11                           < xsl:attribute  name ="src" > http://www.javaei.com/res/images/leaf.gif </ xsl:attribute >
12                       </ xsl:otherwise >
13                       </ xsl:choose >
14                       </ img >
15                       < xsl:choose >
16                           < xsl:when  test ="./href" >
17                               < a >
18                                   < xsl:attribute  name ="href" >< xsl:value-of  select ="./href"   /></ xsl:attribute >
19                                   < xsl:attribute  name ="target" > right </ xsl:attribute >
20                                   < xsl:attribute  name ="class" > h2pnodestyle </ xsl:attribute >
21                                   < xsl:value-of  select ="text()"   />< xsl:value-of  select ="@name"   />
22                               </ a >
23                           </ xsl:when >
24                           < xsl:otherwise >
25                               < xsl:value-of  select ="text()"   />< xsl:value-of  select ="@name"   />
26                           </ xsl:otherwise >
27                       </ xsl:choose >
28                       < ul  class ="collapsed" >
29                           < xsl:apply-templates  select ="./chapter"   />
30                       </ ul >
31                   </ li >
32           </ xsl:for-each >
33       </ xsl:template >

关键是这两句:

<xsl:template match="//chapter">

<xsl:apply-templates select="./chapter" />

这实际上形成了递归调用。

关于 h2p-tool 的问题,不得不说,这是个难题。要求根据 url 生成的 pdf 展现效果与浏览器里展现的效果一致,这无异于做一个浏览器,难度可想而知。在 java 领域,目前还没找到一个可以用的解决方案,所以才不得不借助于别人的 c# 的组件。 h2p-tool 的完善工作将是以后的主要方向,大家如果有好的思路,请不吝赐教。
h2p详细介绍
     h2p文件示例

转载于:https://www.cnblogs.com/javaei/archive/2009/08/31/1557221.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值