22

我一直在尝试找到将文档(例如 doc、docx、ppt、pptx)转换为 pdf 的有效方法。到目前为止,我已经尝试过docsplitoowriter,但两者都花费了 10 秒以上的时间来完成大小为 1.7MB的pptx 文件的工作。有人可以建议我更好的方法或建议来改进我的方法吗?

我试过的:

from subprocess import Popen, PIPE
import time

def convert(src, dst):
    d = {'src': src, 'dst': dst}
    commands = [
        '/usr/bin/docsplit pdf --output %(dst)s %(src)s' % d,
        'oowriter --headless -convert-to pdf:writer_pdf_Export %(dst)s %(src)s' % d,
    ]

    for i in range(len(commands)):
        command = commands[i]
        st = time.time()
        process = Popen(command, stdout=PIPE, stderr=PIPE, shell=True) # I am aware of consequences of using `shell=True` 
        out, err = process.communicate()
        errcode = process.returncode
        if errcode != 0:
            raise Exception(err)
        en = time.time() - st
        print 'Command %s: Completed in %s seconds' % (str(i+1), str(round(en, 2)))

if __name__ == '__main__':
    src = '/path/to/source/file/'
    dst = '/path/to/destination/folder/'
    convert(src, dst)

输出:

Command 1: Completed in 11.91 seconds
Command 2: Completed in 11.55 seconds

环境:

  • Linux - Ubuntu 12.04
  • Python 2.7.3

更多工具结果:

4

4 回答 4

18

尝试从您的 Python 代码中调用unoconv,在我的本地机器上花了 8 秒,我不知道它是否对您来说足够快:

time unoconv 15.\ Text-Files.pptx
real    0m8.604s
于 2014-01-06T12:42:25.953 回答
3

Pandoc是一款出色的工具,能够快速完成您想做的事情。由于您使用 Popen 来有效地为该工具提供命令,因此该工具是用什么语言编写的(Pandoc 是用 Haskell 编写的)并不重要。

于 2014-01-09T16:26:24.717 回答
2

不幸的是,我没有时间做一个完整的基准测试,但您可能想查看 xtopdf,我的用于创建 PDF 的 Python 工具包。它不能进行您想要的全部转换,并且某些转换有限制,但它可能有用。xtopdf 链接:

关于 xtopdf 的在线演示 - 它是什么、它的作用、平台、功能、用户、用途等的一个很好的总结:http: //slid.es/vasudevram/xtopdf

Bitbucket 上的 xtopdf:https ://bitbucket.org/vasudevram/xtopdf

许多博客文章展示了如何将 xtopdf 用于各种目的,包括许多展示如何使用它将不同的输入格式转换为 PDF 的博客文章:http: //jugad2.blogspot.com/search/label/xtopdf

HTH,瓦苏杰夫·拉姆

于 2014-01-07T18:01:42.507 回答
-1

对于 doc 和 docx(但不是 ppt/pptx),您可以在OnlineDemo/docx_to_pdf在线尝试我们独立的(但商业的)高保真渲染引擎

通过“高保真”,我的意思是它从头开始设计为具有与 Microsoft Word 相同的换行符和分节符、制表位等。

于 2015-02-14T20:59:25.063 回答