gpt4 book ai didi

java - 远程使用 document4j 将 DOCX 转换为 PDF java

转载 作者:行者123 更新时间:2023-12-02 01:47:46 28 4
gpt4 key购买 nike

我目前正在尝试使用 java 将高级 Word 文档 (.DOCX) 转换为 PDF。

为了生成 Word 文档,我使用 apache poi@3.15。他们有一个内置的 PDF 转换器,尽管它有点破坏文档格式。

我最终使用了基于云的 API(付费),这感觉很糟糕。不过今天,我发现了 document4j 项目,它让我非常兴奋。

我购买了一个运行 Windows 的 VPS,其唯一目的是将 .docx 文件转换为 .pdf 文件,并且可以访问。 document4j/local-demo 也工作正常,并且能够很好地将我的 .docx 文件转换为 .pdf。

不过,除了 Javadocs 之外,网上的文档似乎非常有限,它对我的​​帮助不如编辑器中的智能感知。

有人可以帮我解决这个问题吗?

堆栈跟踪

2018-11-28 00:37:21.577  INFO 701 --- [o-8081-exec-477] com.documents4j.job.RemoteConverter      : The documents4j remote converter has started successfully (URI: http://xxx.xxx.xxx.xxx:1337)
Exception in thread "pool-3-thread-1" java.lang.NoSuchMethodError: org.glassfish.jersey.internal.util.PropertiesHelper.getValue(Ljava/util/Map;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
at org.glassfish.jersey.apache.connector.ApacheConnector.getSslContext(ApacheConnector.java:324)
at org.glassfish.jersey.apache.connector.ApacheConnector.<init>(ApacheConnector.java:240)
at org.glassfish.jersey.apache.connector.ApacheConnectorProvider.getConnector(ApacheConnectorProvider.java:110)
at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:425)
at org.glassfish.jersey.client.ClientConfig$State.access$000(ClientConfig.java:90)
at org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:122)
at org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:119)
at org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:340)
at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:733)
at org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:286)
at org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:135)
at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:105)
at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:101)
at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:92)
at org.glassfish.jersey.client.JerseyInvocation$AsyncInvoker.method(JerseyInvocation.java:642)
at org.glassfish.jersey.client.JerseyInvocation$AsyncInvoker.post(JerseyInvocation.java:520)
at com.documents4j.job.RemoteFutureWrappingPriorityFuture.startConversion(RemoteFutureWrappingPriorityFuture.java:61)
at com.documents4j.job.RemoteFutureWrappingPriorityFuture.startConversion(RemoteFutureWrappingPriorityFuture.java:15)
at com.documents4j.job.AbstractFutureWrappingPriorityFuture.run(AbstractFutureWrappingPriorityFuture.java:70)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

pom.xml

....

<!-- https://mvnrepository.com/artifact/com.documents4j/documents4j-client -->
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-client</artifactId>
<version>1.0.3</version>
</dependency>

....

相关代码:

IConverter converter = RemoteConverter.builder()
.baseFolder(null)
.workerPool(20, 25, 2, TimeUnit.SECONDS)
.requestTimeout(10, TimeUnit.SECONDS)
.baseUri("http://xxx.xxx.xxx.xxx:1337")
.build();

File pdfFile = File.createTempFile(fileName, ".pdf");
pdfFile.deleteOnExit();

converter.convert(data).as(DocumentType.DOCX).to(pdfFile).as(DocumentType.PDF).execute();

编辑:使用 java -jar ./documents4j-client-standalone-1.0.3-shaded.jar http://xxx.xxx.xxx.xxx:1337 有效,但不幸的是不在java代码本身。

最佳答案

这是一个明显的依赖版本冲突。检查您使用的 Glassfish 版本以及 Glassfish Documents4j 所依赖的版本。运行mvn dependency:tree来帮助您解决这个问题。

关于java - 远程使用 document4j 将 DOCX 转换为 PDF java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53510016/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com