该答案通过了所有测试,但是测试文档中的流程图一个通过。
sudo apt-get install unoconv
doc2pdf respondus-docx-sample-file.docx
到目前为止,为什么这比其他方法建议的要好?
到目前为止,我已经测试了建议的其他方法(尤其是oowriter
和ebook-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也遭受流程图转换失败的困扰。
实际上,我已经花了时间测试此页面上建议的不同方法。请在实际测试中备份所有评论。