apache fop_Apache FOP与Eclipse和OSGi的集成

apache fop

Apache FOP是由XSL格式化对象( XSL-FO )驱动的开源打印处理器。 例如,将数据对象转换为PDF可能非常有用。 但是,事实证明,将其集成到PDE中并最终以OSGi Service的形式启动和运行有点麻烦。

因此,我提供了一个P2存储库,该存储库在单个功能中包含必要的包。 这样,PDE目标设置变得容易得多。 以下各节说明如何使用它。

Apache FOP

如文档所述,Apache FOP是一个Java应用程序,它读取格式化对象(FO)树并将结果页面呈现到指定的输出。 当前支持的输出格式包括PDF,PS,PCL,AFP,XML(区域树表示),打印,AWT和PNG,在较小程度上包括RTF和TXT。 主要输出目标是PDF'。

当然,可以将处理器嵌入Java程序中。 基于JAXP的 Apache FOP依赖于SAX事件来接收XSL-FO输入文档。 基本用法摘要如下所示:

InputStream in = ... // the fo tree to processOutputStream out = ... // pdf destinationFopFactory fopFactory = FopFactory.newInstance();try {Fop fop = fopFactory.newFop( MimeConstants.MIME_PDF, out );TransformerFactory factory = TransformerFactory.newInstance();Transformer transformer = factory.newTransformer();Source source = new StreamSource( in );Result result = new SAXResult( fop.getDefaultHandler() );transformer.transform( source, result );} finally {out.flush();}

有关Apache FOP嵌入式用法的详细说明,请参考在线文档 。

依赖地狱

尽管该代码片段看起来很简单,但是将其集成到Eclipse / OSGi中并不是那么容易。 也许我表现得很愚蠢,但是我花了将近两天的时间来汇编目标定义,最终达到了目的。

为了避免将来出现此问题,并使其他可能陷入同一陷阱的人有一个更好的起点,我创建了开头提到的P2存储库。 为了使用它,只需将存储库位置作为软件站点添加到Eclipse目标定义中:

目标整合

现在定义应该包含处理器的捆绑软件的依赖关系。 这些依赖性是org.apache.servicemix.bundles.foporg.apache.servicemix.bundles.xmlgraphics-commons

依赖关系

一旦这些到位,上面的代码就会编译。 如下所示,很容易开发一种具有用于生成带有签名的PDF format方法的服务类:

public class FopService {private final FopFactory fopFactory;public FopService() {this.fopFactory = FopFactory.newInstance();}public void format(InputStream input, OutputStream output, InputStream stylesheet ){[...] // similar transformation code like above}
}

我编织了一个简单的用法示例项目,其中提供了更多详细信息。 该项目包含一个已经集成Apache FOP的example.target 。 导入项目后,在Eclipse工作区中解析并设置其目标定义 。 运行“ FOP示例”启动配置。 最后但并非最不重要的一点是,打开浏览器并转到URL http://localhost:10080/services/pdf

新创建的PDF应该可以下载了:

pdf下载

用于生成PDF的xml和xsl文档与嵌入式Apache FOP示例的ExampleXML2PDF类所处理的文档相同。 PDF包含虚拟开发团队成员的简单列表。

结果-pdf

请注意,“ Apache FOP当前可能不是完全线程安全的”(请参阅
Apache FOP:嵌入 )。 自然,现实世界中的场景必须考虑到这一点,尤其是在多线程服务器环境中运行时。

结语

尽管开始时道路有些坎bump,但现在Apache FOP集成可以正常工作。 因此,如果您想自己检查示例,它位于https://github.com/fappel/FOP

P2存储库托管在http://fappel.github.io/FOP/

如果您遇到问题或有任何疑问或建议,可以在GitHub项目中添加问题,或在下面的部分中留下评论。

翻译自: https://www.javacodegeeks.com/2015/01/apache-fop-integration-with-eclipse-and-osgi.html

apache fop

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022年最值得学习的 5 种编程语言,你有在学习吗?

点击上方蓝字关注我,了解更多咨询作为一个初学者电脑程序员,很多人都会想知道当下主流的编程语言有哪些,哪些行业和公司都在用它们,因为这些信息可以帮助你了解想要学习的内容,使你更接近最终想用代码完成的事情。今天…

计算机组装名词术语解释,计算机名词解释及简答题总结

计算机名词解释及简答题总结信息技术:指的是用来扩展人们信息器官功能,协助人们更有效地进行信息处理的一类技术1.信息处理:信息的收集、加工、存储、传递、施用相关的行为和活动2.信息产业:是指生产制作信息设备,以及…

wildfly mysql_MySQL作为Kubernetes服务,可从WildFly Pod访问

wildfly mysqlKubernetes上使用Vagrant的Java EE 7和WildFly(技术提示#71)介绍了如何在使用Kubernetes和Docker托管的WildFly上运行琐碎的Java EE 7应用程序。 Java EE 7应用程序是在世界范围内交付的动手实验室 。 它使用与WildFly捆绑在一起…

想学C语言?这些你一定要知道

点击上方蓝字关注我,了解更多咨询首先,你想运行自己的C语言程序,就必须要有一个IDE(集成式开发工具)。不然想运行程序很难。这里有两个方法可以运行你的C语言程序,一个是在菜鸟网站上云运行C语言程序&#…

mongodb实验报告_Dropwizard,MongoDB和Gradle实验

mongodb实验报告介绍 我使用Dropwizard,MongoDB和Gradle创建了一个小项目。 它实际上是作为一个实验性的Guava缓存开始的,作为将计数器发送到MongoDB(或任何其他DB)的缓冲区。 我也想尝试MondleDB插件的Gradle。 接下来&#xff0…

历城职专学前计算机专业,历城职专学前教育专业2020学年第一学期技能运动会拉开帷幕...

原标题:历城职专学前教育专业2020学年第一学期技能运动会拉开帷幕技能运动会学前教育专业技能运动会1月13日,历城职专学前教育专业2020学年第一学期技能运动会拉开帷幕,技能运动会是历城职专对每一位职专学子专业技能考核的一项重要检测&…

guava集合操作类的使用_使用Guava进行测试集合的实现

guava集合操作类的使用我目前正在为LibFX添加一项新功能,为此我创建了一些类似于Java Collections Framework的自定义集合。 我一直在寻找可以与之对抗的测试,并很高兴发现Google的Guava包含了我所需要的:一个庞大的测试套件,可以…

如何正确认识C语言在当今编程领域的地位

点击上方蓝字关注我,了解更多咨询一、什么是语言,什么是C语言,有什么区别与联系?一提到语言这个词,人们自然想到的是像英语、汉语等这样的自然语言,因为它是人和人相互交流信息不可缺少的工具。大家听到我们…

三十学计算机编程,计算机学习三宗罪3——计算机达人成长之路(25)

6、论道(四)计算机学习三宗罪之偏科上文说道木鹏飞声明计算机学习的第二宗罪是学习浮躁,只流于表面而不肯深入底层学习,并指出了编程的三重境界。木鸿飞则继续咨询第三宗罪。“第三宗罪就是偏科。具体来讲有两种表现,一是动手编程和理论学习二…

fx 线程 弹窗_JFXPanel和FX Platform线程陷阱

fx 线程 弹窗JFXPanel是一个组件,可将JavaFX内容嵌入到(旧版;-))Swing应用程序中。 基本上,这使合并两个对象变得非常容易,但是要掌握一些陷阱:两个UI工具箱都是单线程的(Swing:EDT …

计算机操作系统的新技术新知识,计算机操作系统教程:核心与设计原理

计算机操作系统教程:核心与设计原理语音编辑锁定讨论上传视频《计算机操作系统教程——核心与设计原理》是2007年清华大学出版社出版的图书,作者是范策、许宪成、黄红桃。书 名计算机操作系统教程——核心与设计原理作 者范策许宪成黄红桃等ISBN97…

理解好内存管理,C语言就不难学了

点击上方蓝字关注我,了解更多咨询任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式…

智伴机器人安卓怎么设置个人热点_周五到!!宿舍断网怎么办,教你一招

对于大学里喜欢上网的小伙伴们,一旦到了断网的时间段,非常的难受,今天小白教大家一招,看到最后!!以后断网再也不怕啦,熬夜伤身,慎用!!相信很多同学都知道了手…

netty socket_Netty:另一种Web(Socket)服务器

netty socket如今, Netty已用于Internet上的各种应用程序中,以处理数千个(如果不是上百万个)聊天对话,包括Minecraft , Twitter和许多其他应用程序在内的多人游戏。 但是,它并没有深入到开发企业…

计算机用户guest无法删除吗,Win7怎么删除Guest账户?

原标题:Win7怎么删除Guest账户?我们都知道,访客帐户是系统附带的帐户。通常,用户给出了访客帐户。为了确保系统的安全性,它是一个限制帐户。使用客人帐户,您有权临时使用我们的计算机。但是,一些…

为什么C语言不会过时?

点击上方蓝字关注我,了解更多咨询评价任何一门编程语言,都是招人骂的。永远是这样。就像是春寒料峭的季节, 街上穿棉袄和穿单衣的擦肩而过,双方一定是同时在心里出现了两个字:“傻逼!”这个在心理学上有个专…

机械装备计算机控制技术考试题,武汉理工大学机电工程学院研究生课程考试试题(肖峻)...

武汉理工大学机电工程学院研究生课程考试试题课程名称 机械装备计算机控制技术Ⅱ一.简答题(合计30分,每题10分)1、计算机控制系统按系统结构和控制功能分为哪几种?分别描述其特点。2、简述几种常用的数字滤波方法及其优、缺点。如何选用各种数…

java 性能 优化_Java十大简单性能优化

java 性能 优化关于“ web scale ”这个流行词有很多炒作,人们花了很多时间来重新组织他们的应用程序体系结构,以使其系统“规模化”。 但是什么是扩展,我们如何确保可以扩展? 缩放的不同方面 上面提到的炒作主要是关于扩展负载…

cx_oracle写日志信息_看日志痛苦——可能是你方法不对

看日志,是研发的日常工作,相信你已经从各种报错日志中查出许多BUG,但也被冗长、复杂的日志困扰过无数次。在日常工作中,我也经常痛苦于看日志,一般是这些日志长得面目狰狞:日志文件太大,打开都很…

在Swift中使用C语言的指针

点击上方蓝字关注我,了解更多咨询Objective-C和C语言经常需要使用到指针。Swift中的数据类型由于良好的设计,使其可以和基于指针的C语言API无缝混用。同时 Swift也可以自动处理大多数将指针作为参数的情况。在这篇文章里,我们可以看到在Swift…