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 种编程语言,你有在学习吗?

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

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学年第一学期技能运动会拉开帷幕,技能运动会是历城职专对每一位职专学子专业技能考核的一项重要检测&…

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

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

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

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

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

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

计算机用户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…

android 音频合成_【Android工具】用手机测量噪声的工具软件,噪声仪分贝计,量化噪声声音工具...

今天分享一个通过手机麦克风测量环境噪声的工具——声级计(噪声仪)。本来是要分享另一款的,但下载下来的是xapk的安装包,太麻烦了,功能差不多,大家就先用这款吧,有条件的朋友可以去play自己下载。软件名称:…

cassandra_Apache Cassandra和低延迟应用程序

cassandra介绍 多年来, Grid Dynamics拥有许多与NoSQL相关的项目,尤其是Apache Cassandra。 在这篇文章中,我们要讨论一个给我们带来挑战的项目,而我们在该项目中试图回答的问题今天也仍然适用。 数字营销和在线广告在2012年很受…

浅析五种C语言内存分配的方法及区别

点击上方蓝字关注我,了解更多咨询在C语言中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常…

电脑装机完没有efi_电脑装机如何选内存?看完这篇就全懂了

电脑运行太慢,很多小伙伴第一想到的就是加个内存,没错,一般主板上预留了两个以上的内存插槽,加内存是升级电脑最划算的一个硬件升级,其次,可能是加个固态硬盘来提速。今天电脑学习小编教你如何选择适合自己…

塞尔达盾反机器人_微软商店惊现《塞尔达传说:旷野之息》!任天堂暗示《喷射战士3》?| Jump简报...

首先还是祝各位Jumper圣诞快乐!业界新闻1. 各大厂商新年寄语,表明未来动向Fami通收到了54家日厂的新年贺卡,其中表明了相当多的新游戏和企划,具体如下:Atlus :《真女神转生V》和《PROJECT Re FANTASY》正在…

PHP 社区拒绝在俄乌冲突中“站队”

点击上方蓝字关注我,了解更多咨询几天前,PHP 社区邮件讨论列表出现了一封“申请援助乌克兰”的邮件,该邮件由非 PHP 开发者发起,目的在于呼吁 PHP 社区火速参与俄乌冲突...邮件机翻译文如下:有意思的是,非 …