我意识到 jodconverter 已经被遗弃了一段时间,但人们仍在报告它是用于将 docx 转换为 pdf 的工具。我试图让它在我的 Clojure 应用程序中工作以转换一些模板 docx。从命令行它工作得很好:
soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &
java -jar lib/jodconverter-cli-2.2.2.jar $mydocx ~/temp/mydocxout.pdf
而且输出很棒。但是,我似乎无法从我的应用程序中获得工作,该应用程序位于 clojure 中,并试图按照此处的说明进行操作:http ://www.artofsolving.com/opensource/jodconverter/guide/scripting-languages.html
我的 REPL 会话如下所示:
my-app.users> (def connection (SocketOpenOfficeConnection.))
#'my-app.users/connection
my-app.users> connection
#object[com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection 0x4f3c5073 "com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection@4f3c5073"]
my-app.users> (def connection (SocketOpenOfficeConnection. 8100))
#'my-app.users/connection
my-app.users> (def registry (DefaultDocumentFormatRegistry.))
#'my-app.users/registry
my-app.users> (def converter (OpenOfficeDocumentConverter. connection registry))
#'my-app.users/converter
my-app.users> (def pdf (.getFormatByFileExtension registry "pdf"))
#'my-app.users/pdf
my-app.users> pdf
#object[com.artofsolving.jodconverter.DocumentFormat 0x3bd2e41 "com.artofsolving.jodconverter.DocumentFormat@3bd2e41"]
my-app.users> (def pdf-options {"ReduceImageResolution" true
"MaxImageResolution" 300})
#'my-app.users/pdf-options
my-app.users> (.setExportOption pdf DocumentFamily/TEXT "FilterData" pdf-options)
nil
my-app.users> (def input (io/file "resources/docx-templates/titlepage-image.docx"))
#'my-app.users/input
my-app.users> (def output (io/file "/temp/jodout.pdf"))
#'my-app.users/output
my-app.users> (.convert converter input output pdf)
IllegalArgumentException unknown document format for file: resources/docx-templates/titlepage-image.docx com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.guessDocumentFormat (AbstractOpenOfficeDocumentConverter.java:121)
my-app.users> (def docx (.getFormatByFileExtension registry "docx"))
#'my-app.users/docx
my-app.users> docx
nil
如您所见,问题出在最后一点:尽管 CLI 运行良好,但由于某种原因,它似乎不了解 docx 格式。我怎样才能让 API 也能很好地合作?