分享
 
 
 

[COCOON+Jfor]将FO转换为RTF格式文档

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

[COCOON+Jfor]将FO转换为RTF格式文档

继续阅读之前,我们假设您熟悉以下知识,也可以参考本文后面的附录:

n Cocoon(Apache组织的XML项目中的八个子项目之一)

n XSL Formatting Objects (XSL-FO)

n FOP(Formatting Objects Processor)

n Jfor(Open-Source Java XSL-FO to RTF converter)

关键词:

cocoon、jfor、xml、xsl-fo

摘要:

对于如何把PDF格式文档转换为Word文档,我们的思路是,能不能这样:PDFàFOàRTF。

首先,我们来看看如何将FO转换为RTF格式。我们可以让Cocoon+Jfor做到这一点。

概述我们已经知道利用WH2FO和FOP可以把Word2000文档成功转换为PDF格式文档。

第一步,将Word转换为XSL-FO,具体的OpenSource可以在http://www-uk.hpl.hp.com/people/fabgia/wh2fo/wh2fo.html找到。

第二步,按照http://www-900.ibm.com/developerWorks/cn/xml/x-xslfo2app/index.shtml

的指导,将XSL-Fo转换为PDF。

简单的命令例子:

> java org.apache.fop.apps.Fop everything.fo everything.pdf

或者安装了FOP(http://apache.linuxforum.net/dist/xml/fop/)之后,运行:

fop.cmd sample.fo sample.pdf

即可输出PDF文件。

那么现在,我们如何反过来做呢?把PDF文件转换为Word文件。

Microsoft KB上都声称并没有提供直接的方法,他们的建议是,你用Acrobat Reader 5.0打开PDF文件,用Copy Text或者Copy Image命令把所需要的内容粘贴到Word里。还有人声称可以用Acrobat Reader 5.0另存为RTF格式。

HOW TO: Convert Adobe Acrobat Reader (*.pdf) Files in Word 2002 (290927)

- This article explains how to convert a Portable Document Format (PDF) document from Adobe Acrobat Reader to Microsoft Word.

PDFàFOàRTF我们的思路是,能不能这样:PDFàFOàRTF。

首先,我们来看看如何将FO转换为RTF格式。我们可以让Cocoon+Jfor做到这一点:

安装Cocoon:

安装Cocoon相对来说非常简单。分成这么几个步骤:

第一步,安装JDK:

确保你的JDK版本足够高,我的是j2sdk1.4.2_02;之后设置JAVA_HOME为JDK目录,或者运行命令:

Set java_home = F:\j2sdk1.4.2_02

第二步,安装cocoon:

下载cocoon 2.1.3:

The latest source distribution (Cocoon 2.1.3):

· TAR/GZIP format (Unix platforms): cocoon-latest-src.tar.gz

· ZIP format (Windows platforms): cocoon-latest-src.zip

解压之后,运行cocoon-2.1.3根目录下的build.bat,来编译cocoon:

E:\cocoon-2.1.3>build

Using Java from F:\j2sdk1.4.2_02Buildfile: build.xml

prepare:

+-----------------------------------------------------------+

Apache Cocoon 2.1.3 [1999-2003]

+-----------------------------------------------------------+

Building with Apache Ant version 1.5.4 compiled on August 12 2003

validate-jars:

Copying 1 file to E:\cocoon-2.1.3\build\cocoon-2.1.3\temp

validate-config:

Validating configuration files

Validating cocoon.xconf using a very basic RELAX NG grammar ...

BUILD SUCCESSFUL

Total time: 2 minutes 30 seconds

编译成功之后,我们可以试试看cocoon的效果。

第三步,启动cocoon:

本质上,cocoon还是一个servlet。请运行cocoon-2.1.3根目录下的cocoon.bat,来启动cocoon:

E:\cocoon-2.1.3>cocoon servlet

cocoon.bat: using .\build\webapp as the webapp directory

于是乎,就出现了cocoon的运行窗口:

让我们试试看效果:打开IE,输入

http://localhost:8888

即可看到:

Okay,一切正常。

现在,我们要来试试FOàRTF的转换了。前提是,必须把Jfor的包放入cocoon下。

第四步,安装Jfor到Cocoon:

从Jfor的官方站点

http://www.jfor.org/

下载Jfor二进制包。地址是:

http://prdownloads.sourceforge.net/jfor/jfor-0.7.2rc1.jar?download

下载了jfor-0.7.2rc1.jar,把它放在

cocoon-2.1.3\lib\optional

子文件夹下。

然后重新build一遍cocoon,步骤同第二步。

再次启动cocoon servlet。

第五步,一个XMLàRTF的例子:

cocoon-2.1.3\build\webapp目录下新建一个文件夹,例如名字就叫“RtfDemo”。

建立这么几个文件:

sitemap.xmap

<?xml version="1.0"?>

<!-- CVS $Id: sitemap.xmap,v 1.12 2003/07/29 03:15:47 vgritsenko Exp $ -->

<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">

<!-- ================== Views ========================= -->

<map:views>

<map:view name="content" from-label="content">

<map:serialize type="xml"/>

</map:view>

<map:view from-label="content" name="pretty-content">

<map:transform src="context://stylesheets/system/xml2html.xslt"/>

<map:serialize type="html"/>

</map:view>

<map:view name="links" from-position="last">

<map:serialize type="links"/>

</map:view>

</map:views>

<!-- ================ Pipelines ====================== -->

<map:pipelines>

<map:pipeline>

<!-- ================ MyFO2RTF =================== -->

<map:match pattern="hello.rtf">

<map:generate src="fo/hello.xml"/>

<map:transform src="fo/page2fo.xsl"/>

<map:serialize type="fo2rtf"/>

</map:match>

<!-- ================ MyFO2RTF =================== -->

</map:pipeline>

</map:pipelines>

</map:sitemap>

sitemap.xmap是一个当前站点的配置,非常重要。“map:match”节点指明了如何转换。

新建一个子文件夹Fo,其中放置这么两个文件:

hello.xml

<?xml version="1.0" encoding="gb2312"?>

<!-- CVS $Id: hello.xml,v 1.3 2003/05/07 04:57:13 vgritsenko Exp $ -->

<page>

<title>BPA!</title>

<content>

<para>美国当地时间11月12日,微软发布了SQL Server 2000的开发支援工具“Best Practices Analyzer(BPA)”。 BPA是一种旨在构筑便于管理的SQL Server应用的工具。不仅可以防止导入SQL Server时遗忘设定等,而且还可以用于数据库的管理。微软从当天起通过该公司的Web站点开始提供该工具的β版。 !</para>

</content>

</page>

page2fo.xsl

<?xml version="1.0"?>

<!-- CVS $Id: page2fo.xsl,v 1.2 2003/05/07 04:57:13 vgritsenko Exp $ -->

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="/">

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

<fo:layout-master-set>

<fo:simple-page-master master-name="page"

page-height="29.7cm"

page-width="21cm"

margin-top="1cm"

margin-bottom="2cm"

margin-left="2.5cm"

margin-right="2.5cm">

<fo:region-before extent="3cm"/>

<fo:region-body margin-top="3cm"/>

<fo:region-after extent="1.5cm"/>

</fo:simple-page-master>

<fo:page-sequence-master master-name="all">

<fo:repeatable-page-master-alternatives>

<fo:conditional-page-master-reference master-reference="page" page-position="first"/>

</fo:repeatable-page-master-alternatives>

</fo:page-sequence-master>

</fo:layout-master-set>

<fo:page-sequence master-reference="all">

<fo:static-content flow-name="xsl-region-after">

<fo:block text-align="center"

font-size="10pt"

font-family="serif"

line-height="14pt">page <fo:page-number/></fo:block>

</fo:static-content>

<fo:flow flow-name="xsl-region-body">

<xsl:apply-templates/>

</fo:flow>

</fo:page-sequence>

</fo:root>

</xsl:template>

<xsl:template match="title">

<fo:block font-size="36pt" space-before.optimum="24pt" text-align="center"><xsl:apply-templates/></fo:block>

</xsl:template>

<xsl:template match="para">

<fo:block font-size="12pt" space-before.optimum="12pt" text-align="center"><xsl:apply-templates/></fo:block>

</xsl:template>

</xsl:stylesheet>

好了,一切准备就绪。

浏览

http://localhost:8888/rtfdemo/hello.rtf

就可以看到RTF版本的输出了,你可以另存为hello.rtf:

同时,cocoon的窗口也输出了这个过程:

12:39:40.852 EVENT Started SocketListener on 0.0.0.0:8888

12:39:40.852 EVENT Started org.mortbay.jetty.Server@1037c71

jfor.INFO:jfor V0.7.1 - setting up conversion...

jfor.INFO:Parsing xsl:fo document...

jfor.INFO:Writing out RTF...

jfor.INFO:Done converting xsl:fo to RTF.

jfor.DEBUG:conversion took 80 milliseconds.

jfor.INFO:jfor V0.7.1 - setting up conversion...

jfor.INFO:Parsing xsl:fo document...

好了,用Cocoon+Jfor这么简单就实现了XMLàRTF。不过,这还是万里长征第一步。

待续。

缩略语清单:

Cocoon:

Cocoon是Apache组织的XML项目中的八个子项目之一,根据Apache官方定义,Cocoon是一项XML发布框架。它允许你定义XML文档和文档的转换,并最终生成你所选择的表 示形式,例如HTML, PDF, SVG, VRML等等。另外,Cocoon使你能够在XML文件中加入处理逻辑,从而是XML管 道具备动态的特性。

官方主页:

http://cocoon.apache.org/

XSL-FO:

XSL 格式化对象规范是 W3C 的正式建议,通常称其为 XSL-FO,XSL-FO 定义了许多 XML 标记,这些标记描述了应如何显示内容。

XSL-FO 文档定义了制作高质量可打印文档时非常重要的几件事情:

· 有关页面的实际大小的信息(信纸和 A4 等等)

· 有关页边距(顶部、左边、底部和右边)、页眉和页脚和页面其它特性的信息

· 有关文本的字体、字体大小、颜色和其它特征的信息

· 要打印的实际文本,由描述段落、突出显示、表等类似物的元素来标记

研读 W3C 站点(w3.org/TR/xsl)上的 XSL-FO 规范(总共 400 页)。

有关 XSL-FO 的更多一般信息,请访问位于 w3.org/style/xsl/ 的 W3C Style 页面。

XSL-FO详细教程:

http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/xml-onlinecourse-bytitle/3B308072632F949FC8256D320006CA3F?OpenDocument

FOP

FOP (Formatting Objects Processor) 是第一个基于XSL:FO的打印格式处理器,也是第一个与输出无关的格式处理器。它是一个Java程序,能够从对象树中读入然后生成渲染过的页面输出到指定的流。目前支持的输出格式有PDF,PCL,PS,SVG,XML(以树形结构表示),打印机,AWT,MIF和TXT。最主要的输出指的是PDF。

James Tauber - FOP 的最初作者。他开发了该工具的原始版本,而且很大方地开放了该代码,后来又将它移交给 Apache XML Project。

从 xml.apache.org/dist/fop 下载 Apache XML 项目的 FOP 软件包。

FO工具

JFOR(Java xsl-FO to Rtf converter)是把依照XSL-FO规范的XML文档转换成RTF(Rich-Text Format)格式, 它的目的与把XSL-FO(通常用XSLT生成)文档转换成PDF(使用FOP或其他类似的工具)相似。

WH2FO及其验证工具FOA的作者是Fabio Giannetti。WH2FO 是一个处理由Word 2000产生的HTML的Java应用程序,并把它们转换成XML内容文件和XSL样式表文件。从这些文件,一个标准的XSLT处理器可能获得只含有XSL-FO标记的fo文件。也可以应用样式表把XML文件转换成HTML,这样做就丢弃了Word额外补充进来的标记。使用XSL-FO Render,比如FOP,能够进一步渲染成PDF。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有