在Java中将PDF转换为Word

4

是否有可能在Java中将PDF转换为Word?我不是指解析PDF文档,然后再自定义呈现它以转换为Word。我要的是一个可以直接将其转换的Java库。


1
和其他人一样,我认为你不会有太多的好运。如果你控制生成PDF的系统,那么你可以在生成时生成多种格式(你没有说PDF来自哪里)。这是一个选项吗? - Paul Jowett
我理解您想要“直接”完成此项任务,但在没有单一(开源?)库的情况下,您可以尝试使用http://pdfbox.apache.org/进行提取,并使用docx4j创建docx。 请注意:您的结果可能会有所不同。请谷歌搜索pdfbox中的“段落边界分割”。 - JasonPlutext
3个回答

4
阅读PDF文档是一个非常复杂的过程,在Java中提取PDF文档中的非文本信息没有好的免费库。更糟糕的是,PDF文档有很多难以重构的布局信息,例如Word文档中的表格在PDF中变成了一些线条和一堆文本片段。

1
“很难重建的大量布局信息”是误导性的。其实根本没有布局信息。PDF 中的所有内容都是绝对定位的。没有表格这种东西,只有线条、字符(实际上是“字形”)和可能的一些位图。甚至,“文本”也可以只是一些线条。虽然不太高效,但完全“合法”。 - Mark Storer
1
我的评论有一个例外:PDF中有一种名为“标记内容”的可选内容。当存在时,它可以标记表格、段落等。但是,没有标准的方法来写出您需要进行可靠的PDF->N格式转换所需的详细信息。 PDF几乎是一种只能写入的格式。 - Mark Storer
尝试进行一些PDF重建后,PDF中存在一些视觉布局信息,但没有真正的结构化信息。我同意你的看法,马克,即将PDF转换为非图像格式非常困难。 - Michael Shopsin

2
几乎不可能从任意PDF中重新创建语义信息。如果您拥有编写它的相同工具,则有更多机会,但即便如此,仍然存在许多不确定性。在(文本)PDF中,您唯一可以确定的是每个字符在页面上的位置。(请注意,某些PDF包含位图,其中包含文本信息,必须依赖OCR)。
计算机科学系和其他地方有几个团队正在花费大量精力尝试获取语义信息。我们与领导者之一的宾州州立大学合作,他们正在努力提取表格。在良好的情况下,他们可以获得90%的成功率,在糟糕的情况下为50%。
因此,正式答案是您无法重新创建语义信息,但偶尔可能会有好运气。(我们经常为化学做这样的事情,并且如果我们定期获得50%,我们就会感到幸运)。

我从来没有理解过这个...只需保留原始文档。@.@ 我确信有时确实是必要的,但整个 PDF 的目的是作为一份最终的、不可编辑的文件。</petpeeve> - Kevin Coppock
@kcoppock。这是当你需要从别人的文档中获取某些内容时的情况。例如,我想要科学文献中的数据。尽管出版商拥有XML,但他们通常拒绝提供,因此我们必须尝试从PDF中提取。在许多情况下,人们不得不重新输入或重新绘制图表。 - peter.murray.rust
我能理解,但通常这意味着出版商不希望你使用该内容。 - Kevin Coppock
1
@kcoppock。在科学界,我因挑战这种观点而闻名,但Stackoverflow不是讨论这个问题的最佳场所!然而,在许多情况下,这样做是合法的。 - peter.murray.rust

0
  1. 您可以尝试使用iText库来完成。读取PDF文件,然后将其写成RTF格式。
    这并不简单,因为您必须保留PDF中具有的不同样式。

  2. 您可以使用一些外部工具。
    安装一些免费程序,如“Free PDF to Doc”,并从您的Java程序中执行它。
    在大多数情况下,这种方法都很好用。

  3. 使用Acrobat Pro SDK从您的Java代码中实现。

祝您好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接