java将FOP xml嵌入到PDF:为什么与CLI相比如此缓慢?
我的程序使用web服务为数据创建一个xml文件,然后将该文件与我的xsl文件一起传递给FOP以生成PDF。在命令行上,它如下所示:
$ fop -xml ./test.xml -xsl ./template.xsl -pdf ./test.pdf
Apr 22, 2016 1:30:15 PM org.apache.fop.events.LoggingEventListener processEvent
INFO: Rendered page #1.
Apr 22, 2016 1:30:15 PM org.apache.fop.events.LoggingEventListener processEvent
INFO: Rendered page #2.
Apr 22, 2016 1:30:15 PM org.apache.fop.events.LoggingEventListener processEvent
INFO: Rendered page #3.
所有这些都发生在几秒钟之内。然而,当我为我的嵌入式(Clojure)系统使用相同的输入和输出文件时,遵循源代码发行版中的示例,当我从REPL运行PDF时,渲染完全相同的PDF大约需要整整一分钟。如何使我的嵌入式版本与命令行版本同步
(defn generate-leave-pdf-faster [{:keys [xml-file xslt-file pdf-file]
;; Nothing is faster yet.
:or {xslt-file (-> "template.xsl"
io/resource
io/file)
pdf-file (io/file "temp/fopout.pdf")}}]
(let [fop-factory (-> (.toURI (io/file ".")) FopFactory/newInstance)
fo-user-agent (-> fop-factory .newFOUserAgent)
transformer (-> (TransformerFactory/newInstance) (.newTransformer (StreamSource. xslt-file)))
out (io/output-stream pdf-file)]
(try
(let [res (-> (.newFop fop-factory MimeConstants/MIME_PDF fo-user-agent out)
.getDefaultHandler
SAXResult.)
src (-> xml-file StreamSource.)]
(.setParameter transformer "versionParam" "2.0")
(.transform transformer src res) ;; this takes a full minute
(str pdf-file))
(finally (.close out))))) ;; I had tried .close rather than a with-open wrap hoping for improvement, but no luck.
共 (0) 个答案