将docx转换成PDF


41

我正在尝试使用命令行在 Ubuntu服务器上将docx文件转换为pdf,但是到目前为止,我尝试过的所有转换器似乎都无法正确转换Word 2007/2010/2013文件。

显然,在线转换器可以毫无问题地对其进行管理,但是Web服务不是一种选择,因为文件包含敏感数据。对于测试,我使用此Word 2007文件是因为它包含一些重要元素(公式,矢量图形,图像,列表等)。我测试了以下工具(部分来自本文):

lowriter (LibreOffice Writer)-输出不正确(圆圈应该在最后一页,而不是第一页)

在此处输入图片说明

unoconv-与LibreOffice相同,因为它不使用自己的转换器。首先转换为odt,然后转换为pdf,会使文件完全混乱。

abiword --to=pdf filename.doc -错误和不完整(缺少许多元素):

在此处输入图片说明

OpenOffice Writer-与abiword相同的结果

wvPDF -崩溃并显示以下错误消息:

〜$ wvPDF 2007_Office_DocEncryption.docx test.pdf

当前目录:/ home / webmt / dev / test /

运行乳胶有些问题。

检查test.log中的错误

继续...

转换为dvi失败

有什么方法可以在Linux上正确地将docx文件转换为PDF?如果我知道它适用于已经提到的任何程序的人,它也将对我有帮助。SE允许我立即开始赏金。

ps我正在使用Ubuntu服务器12.04


结论

我不得不得出结论,就我而言,到目前为止,还没有可靠的工具可与Ubuntu上的新MS Word格式及其所有元素配合使用,并创建docx文件的一对一副本。我测试过的工具都无法正确转换示例文件。由于我将面临非常不同类型的文档版本/内容,并且输出质量具有最高优先级之一,因此我最终将通过连接到Linux的Windows服务器上Word中的VB宏执行转换。

我会将获得最佳结果的帖子设置为可接受的答案。但是,赏金旨在提供一种绝对正确转换的解决方案。再次感谢大家。


3
尝试乳胶?
Braiam 2013年

@ScepticalJule,是的,最后有问题。我只是看了第一页。

1
@Braiam能否删除一个使用乳胶转换的链接?
怀疑的Jule


2
@ScepticalJule我认为Braiam的意思是您应该尝试立即用乳胶编写文档。从docx转换为乳胶比从docx转换为pdf痛苦得多。您可以尝试从docx转换为doc,然后再从doc转换为pdf。但是您必须找到一个独立于LO的工具才能这样做。让我知道我是否可以提供其他帮助,以及我的回答是否对您有帮助。
don.joey 2014年

Answers:


57

该答案通过了所有测试,但是测试文档中的流程图一个通过。

sudo apt-get install unoconv
doc2pdf respondus-docx-sample-file.docx

到目前为止,为什么这比其他方法建议的要好?

到目前为止,我已经测试了建议的其他方法(尤其是oowriterebook-convert),但是它们通过的测试少于此方法。该ebook-convert方法将页边距和部分文本从文档中剥离。

这种方法甚至比彩虹转换器等专业转换器产生更好的结果。

我也尝试将其转换为html,但是在圆圈和流程图中带有正方形的图形是不正确的。

为什么流程图测试失败?

看来libreoffice和unoconv在正确呈现.docx文件中的流程图方面存在一些问题。这可能是因为它是使用Microsoft Office中的智能艺术制作的。那就是问题所在。这也是在此线程上讨论的错误。如您所见,文本和视觉信息包含在上述方法产生的pdf中(尽管我必须选择文本)。

流程图未完全按预期显示。

例如,字体颜色无法正确读取,某些行太长。我不知道任何能够正确显示智能艺术的Linux解决方案。:(

这也是为什么print此页面上发布的所有解决方案都不会让您满意的原因。

简而言之

简而言之,您正在做的事情真的很困难,目前还没有任何解决方案可以完全满足您的要求。docx2pdf转换的致命弱点是聪明的艺术。如果您可以没有这种生活,或者找到一种方法来发现聪明的艺术品并将其以某种方式转换为图像,那么您就可以实现自己的目标。

选项1.强迫您的用户处理问题

这是一个非常微妙的解决方案。您的内容创建者可以按照Office帮助页面中的说明将其智能图稿另存为jpg ,因此可以在您的服务器上进行转换。

选项2.解决问题

如果流程图通常非常相似,并且取决于开发人员的水平,则可以尝试分别转换智能作品。您可以从.docx文档集群中提取drawing1.xml文件,然后使用自然语言处理和一些疯狂的技巧来重建智能艺术。例如,您必须弄混这种xml:

<dsp:txBody>
<a:bodyPr spcFirstLastPara="0" vert="horz" wrap="square" lIns="8255" tIns="8255" rIns="8255" bIns="8255" numCol="1" spcCol="1270" anchor="ctr" anchorCtr="0">
<a:noAutofit/>
</a:bodyPr>
<a:lstStyle/>
<a:p>
<a:pPr lvl="0" algn="ctr" defTabSz="577850">
<a:lnSpc><a:spcPct val="90000"/>
</a:lnSpc>
<a:spcBef>
<a:spcPct val="0"/>
</a:spcBef>
<a:spcAft>
<a:spcPct val="35000"/>
</a:spcAft>
</a:pPr>
<a:r>
<a:rPr lang="en-US" sz="1300" b="1" kern="1200"/>
<a:t>All three sides are different lengths
</a:t>
</a:r>
</a:p>
</dsp:txBody>

或者作为最小的解决方案,您至少要从文件中提取文本(<a:t>?)并以更简单的方式保存它。或者,如果pdf的流程图完全相同,则可以编写一个脚本来更改xml本身的文本颜色和行长。然后,您可以运行doc2pdf,您将获得一个基本上具有所有正确信息的文件,但可能没有格式。对于流程图,您可能还希望包括一些格式,因为格式是信息的一部分

选项3.使用第三方服务

过去几天,我进行了更多研究,并找到了可以完美完成转换的服务:zamzar。Zamzar允许您上传docx文件,然后通过电子邮件发送链接。他们还提供(收费?)服务,您可以在其中将任何文件发送到pdf@zamzar.com,然后将转换后的文件取回收件箱。您可以轻松地围绕此系统构建一个系统,在该系统中,您可以自动发送文件并从电子邮件中解析文件。这不是太多的工作,并且最终结果是最好的。

笔记

  • 如果有人有其他服务也可以这样做,请随时对其进行编辑。
  • 我已经邮寄了赞扎尔支持者的邮件,询问他们是否有API。那会更容易。
  • 也许apose为.NET和Java也可以帮帮忙?或者像docx4java一样在这个非常相关的SO帖子中
  • 另一个选择是研究似乎过时的odf转换器,它依赖于openoffice而不是libreoffice。
  • 我现在可以确认Java jodconverter也遭受流程图转换失败的困扰。

实际上,我已经花了时间测试此页面上建议的不同方法。请在实际测试中备份所有评论。


1
我收到zamzar的消息:“我们目前有一个API,希望在接下来的几个月内在Beta中启动-如果您有兴趣,我们可以让您加入Beta试用吗?” 他们还提到他们的转换系统是他们内部开发的。
don.joey 2014年

@jasonplutext我同意审稿人的意见,认为您的编辑没有帮助。作为plutext的作者(我想?),建议您添加一个自己的答案,并声明免责声明。谢谢。
don.joey

最近几年有任何更新吗?
becko

@becko我还没有跟进。也许为别人设置赏金?
don.joey

请注意将来:lowriter现在的最新版本中的正确用法是 lowriter --convert-to pdf input_file.docx。使用--pt pdf将无提示地失败。
ACK_stoverflow,

6

这是一个行之有效的命令行解决方案---但使用专有软件。

我认为基本问题是Microsoft Word格式仅对于Microsoft Word是完全可以理解的(即使在版本之间也存在差异---过去有Word文件以较新的格式打开时格式错误)。所有其他解决方案都是近似值和破解,因此它们能否工作取决于文件。

因此,请确保您需要使用Microsoft Word安装来处理.docx文件(是的,我认为这是他们的选择,这很公平。如果您不想使用Word,请不要使用它---我同意LaTeX用于我的工作,但是很难说服周围的其他人...)。

我从很久以前就使用Crossover在我的Linux桌面(1)中运行Microsoft Office,发现它非常有用。也许它也可以与葡萄酒一起使用---从未尝试过。

我使用以下配置进行转换:

1)我已经安装了Crossover

2)我在Crossover下安装了我的Microsoft Office版本

3)在Microsoft Word中,禁用“后台打印”

4)我已经cups-pdf安装了打印机并将其选择为默认打印机。

5)要进行转换,请运行(此处的提示):

~/cxoffice/bin/wine --cx-app winword.exe respondus-docx-sample-file.docx /q /n /mFilePrintDefault /mFileExit

6)您转换后的文件将出现在~/PDF/目录中。

您的文档几乎完美地出现了(答案#2有点错位,当在Crossover下运行时,在Office Word 2007中会显示出来---我不知道它是否与Windows版本有关)。

第1-2页

第3-4页

现在,问题在于图形字界面会弹出---我不知道如何使其“无头”。Word的命令行选项没有帮助...

(1)我与Codeveawers毫无关系-只是一个快乐的用户。


4

过去我也遇到过这个问题,最近也不必使用它,所以我不知道它是否仍在影响我。

至于回答问题:

这个问题:如何将.doc或.docx批量转换为.pdf,在注释中给出了为什么转换lowriter失败的原因:

当心从命令行使用“空格”字符...当您到达空格字符时,只需按“ tab”;)– Pitto 2012年11月16日,13:11

这个问题的答案也可能会有所帮助:

如何将ODT文件转换为PDF?

你会跑libreoffice --headless --convert-to pdf *.odtman libreoffice如果您需要帮助来理解或调整该命令,可以使用该命令获取有关libreoffice的更多信息。

但是,根据以下错误,您当时无法打开LibreOffice:https : //bugs.freedesktop.org/show_bug.cgi?id=37531


即使在SuperUser上,此问题也与Ubuntu有关:https : //superuser.com/questions/156189/how-to-convert-word-doc-to-pdf-in-linux

第一个答案有两个选择,一个使用CUPS并创建PDF打印机,另一个使用LaTex,尽管您确实说过LaTex失败了。

至于通过CUPS转换为PDF PDF您将运行sudo apt-get install cups-pdf之后oowriter -pt pdf your_word_file.doc(x)。这可能有助于解决oowriter问题。

当大多数工具都使用ODT时,由于它们与LibreOffice / OpenOffice / AbiWord有关,因此您试图从DOC / DOCX转换为PDF可能是一个问题。因此,他们要么无法尝试将其从Microsoft的DOCX格式转换,要么无法转换为ODT。

从.docx w转换时,存在多个错误。艺术字(包括版本):

这是来自LibreOffice论坛,内容涉及从.doc和.docx的转换:http : //en.libreofficeforum.org/node/5096。该日期为2013年1月,因此应该有所适用。

除此之外,我真的不知道。希望您能解决您的问题!


抱歉,建议的工具都无法完全转换。
怀疑朱丽叶

2

如果您安装了Libreoffice,则可以尝试使用该工具进行转换。只需按键盘上的Ctrl+ Alt+ T打开终端。打开时,运行以下命令:

libreoffice --headless -convert-to pdf <file_name>.docx -outdir output/path/for/pdf

另一种选择是安装Cups PDF

为此,只需按键盘上的Ctrl+ Alt+ T打开终端。打开时,运行以下命令:

sudo apt-get install cups-pdf

然后创建一个新打印机,将其设置为PDF文件打印机,并根据需要命名,只要知道名称,然后运行:

oowriter -pt pdf your_word_file.docx

您的PDF文件将位于中~/PDF


1
那些都没有成功。
怀疑的Jule 2014年

可以回答原因。
怀疑朱丽叶2014年

感谢您的答复,这很有意义,但是令我惊讶的是打印没有用,因为它喜欢打印到纸上... :)
米奇

关键问题是LibreOffice甚至无法正确打开和显示文档。因此,输出也不正确。它在您的Linux上工作了吗?
怀疑朱丽叶2014年

很高兴知道。我只将Office用于基本文档,并没有提出任何更复杂的要求,但是当需要时,我会确定并参考此内容。感谢您提出的重大问题,我一定会将其添加为收藏夹,以备将来参考。我将保留此答案和评论,以供其他用户参考。
米奇

2

这是一个痛苦的事实:Linux的Office解决方案完全失败!我多年来一直是GNU / Linux的全职用户,并且我一直在搜索和尝试不同的办公解决方案,从旧的Open-Office到后来的Libre-Office,Abi-Word等。都未能帮助我完成办公室工作。对于非拉丁语言(从右到左的语言,如波斯语,阿拉伯语等),情况甚至更糟。用户必须使用这些软件才能完成工作!而且Microsoft Office兼容性还不存在。我可以谈论几个小时和几个小时的尝试,而他们都让我失望,但这不是这个问题的重点。

我也尝试过使用WINE安装和运行Microsoft Office,虽然取得了一定的成功,但效果并不理想,当我尝试打开Office文件时,它大多崩溃了。

LaTeX很好,但这不是办公解决方案。LaTeX是用于排版的,它更像是专业人士的工具,没有电子表格,也没有演示文稿。

那么解决方案是什么?

这不是命令行解决方案。这些年来,我想出的唯一解决方案是,在虚拟机(如VirtualBox)中使用最少的Microsoft Windows安装并进行安装,以使我能够进入GNU / Linux操作系统并完成我的办公室工作。 Microsoft Office套装。

在此处输入图片说明

听起来可能并不漂亮,但这是唯一可以完美工作的解决方案,并且可以让我免于在宝贵的时间内与糟糕的解决方案作斗争。起初,我本人以为这不是一个好的解决方案,但是在其他所有人都失败了并且做了2年以上的VM工作之后,我对此感到非常满意 :)

================================================== =============================

注意-1:我不是在宣传Microsoft产品!只是试图帮助解决问题并继续前进。

注2:如上所述,这不是命令行解决方案。那为什么要发布答案呢?因为它是经过测试且性能良好的选择!如果没有可用的WORKING命令行解决方案(我非常怀疑是这种情况),那么使用ALTERNATIVE选项比不使用NO选项更好。


1
为什么只使用MS word wine代替虚拟机?
totti 2014年

1
如前所述,我在使用MS-Office进行安装和使用方面的经验WINE并不理想。该程序无法像在Windows上那样工作(显示错误的行为),并且崩溃很多!
赛义德·穆罕默德

3
无OHE已经downvoted 然而,但问题确实需要一个命令行的解决方案。由于MS,这不是没有用的,因为它完全忽略了这个问题,所以没有用。
djeikyb 2014年

3
Seyed,请注意,OP明确要求一个命令行解决方案,该解决方案可在他的Ubuntu服务器上运行(该服务器甚至可能没有GUI!)。您的回答还不错,但是在这种情况下就没有意义了。
谷氨酰胺

2
@ScepticalJule可笑。您明确地将赏金放在命令行解决方案上。然后,您选择一个答案,甚至不是该问题的答案。您甚至还研究了其他答案。包括这个和我的吗?
don.joey 2014年

1

这里有一些应用程序,您可以尝试看看它们 是否可以使用FF Multi Converter,也可以尝试使用Kingsoft Office


安装FF Multi Converter,执行命令...什么也没发生。金山词霸有一个不错的GUI,但是它无法正确打开/显示文件(即使我安装了必需的字体,公式也丢失了。圆圈中的字母也丢失了)。
怀疑的Jule 2014年

0

从Software Center或Synaptic安装Calibre,并将默认输出设置为PDF。

在shell提示下,执行

电子书转换伪文件名 .docx .pdf -h


这以某种方式削减了文本。
don.joey 2014年

崩溃ValueError: No plugin to handle input format: docx。Google对此没有帮助,因此我将报告一个错误。
怀疑朱丽叶2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.