Mac:如何以编程方式将Excel(和其他)文件类型转换为PDF

时间:2011-03-11 14:32:02

标签: excel macos pdf-generation xls

我有兴趣以编程方式将Excel电子表格/工作簿转换为PDF文件。其他人已经提出并回答了这个问题(参见How to convert Word and Excel documents to PDF programmatically?convert excel to pdf in python),但这些都没有做我想做的事情:

  1. 我想要一个不需要使用Microsoft Office的命令行工具。
  2. 我希望它可以在Mac上运行。
  3. 我希望它能够完成整个电子表格; Perl解决方案只做常量。
  4. 我想使用已经调试过的东西,而不是编写代码。
  5. 在我看来,一个简单的方法就是使用内置于MacOS中的“Quick Look”系统。 MacOS有预览任何文档的方法(在Finder中选择它并按空格键)。它还有将事物转换为PDF的方法。应该有一种方法可以使用Apple内置的如何呈现XLS和XLSX文件的知识。我只是不知道如何从命令行使用QuickLook以及如何让它生成PDF输出到文件。

    Apple确实提供了一个名为qlmanage的程序,可用于以编程方式生成HTML文件和PNG,但它会生成一组HTML文件,而不是PDF文件。

2 个答案:

答案 0 :(得分:2)

好吧,我想出了一个涉及使用qlmanagewkhtmltopdf的解决方案。基本上,我运行qlmanage来制作HTML,并使用wkhtmltopdf将HTML转换为PDF。不幸的是,HTML页面是以或多或少的随机顺序生成的,所以我需要查看属性列表以确定要放在哪个页面。幸运的是,在我的工作簿中,页面可以进行排序。

#!/usr/bin/python
# 
# convert an excel workbook to a PDF on a Mac
#
#
from subprocess import Popen,call,PIPE
import os, os.path, sys
import xml.dom.minidom
import plistlib

if len(sys.argv)==1:
    print("Usage: %s filename.xls output.pdf" % sys.argv[0])
    exit(1)

if os.path.exists("xdir"):
    raise RuntimeError,"xdir must not exists"
os.mkdir("xdir")
call(['qlmanage','-o','xdir','-p',sys.argv[1]])

# Now we need to find the sheets and sort them.
# This is done by reading the property list
qldir = sys.argv[1] + ".qlpreview"
propfile = open("%s/%s/%s" % ('xdir',qldir,'PreviewProperties.plist'))
plist = plistlib.readPlist(propfile)
attachments = plist['Attachments']
sheets = []
for k in attachments.keys():
    if k.endswith(".html"):
        basename = os.path.basename(k)
        fn = attachments[k]['DumpedAttachmentFileName']
        print("Found %s -> %s" % (basename,fn))
        sheets.append((basename,fn))
sheets.sort()

# Finally use wkhtmltopdf to generate the PDF output
os.chdir("%s/%s" % ('xdir',qldir))
cmd = ['wkhtmltopdf'];
for (basename,fn) in  sheets:
    cmd.append(fn)
cmd.append(sys.argv[2])
call(cmd)
os.chdir("../..")
call(['/bin/rm','-rf','xdir'])

答案 1 :(得分:1)

无需编写任何代码,我想我可以查看以下内容:

首先安装CUPS-PDF,它是一个通用的后脚本后台系统,直接连接到CUPS,系统OS-X用于打印。它允许您直接打印到pdf,并在打印菜单中显示为另一个打印机选项。安装完成后,您可以使用automator打印任何特定的查找器项目,从主要的自动化工作流程中选择Utilities -> Print Finder Items,您可以选择要打印的驱动程序,这样您就可以选择CUPS-PDF选项。

您可以将应用保存为Droplet或应用,call from the command line

但是我不确定如何指定参数,比如输入文件,因此可能需要进行一些研究,或者您可能必须接受仅使用automator来获取特定位置的所有finder项目并使用bash移动项目预先。

相关问题