有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案