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

我有兴趣以编程方式将Excel电子表格/工作簿转换为PDF文件。 其他人已经提出并回答了这个问题(请参阅如何将Word和Excel文档以编程方式 转换为PDF格式 , 并将python中的excel转换为pdf格式 ),但这两者都不能做我想做的事情:

  1. 我想要一个不需要使用Microsoft Office的命令行工具。
  2. 我希望它能在Mac上工作。
  3. 我想要它做完整的电子表格; Perl解决scheme只做常量。
  4. 我想使用已经debugging的东西,而不是编写代码。

在我看来,一个简单的方法是使用MacOS内置的“Quick Look”系统。 MacOS有预览任何文档的方法(在Finder中select它并按空格)。 它也有办法将东西转换成PDF。 应该有一种方法来使用苹果公司内置的如何呈现XLS和XLSX文件的知识。 我只是不知道如何从命令行使用QuickLook,以及如何让它产生PDF输出到文件。

苹果提供了一个名为qlmanage的程序,可以用来编程生成HTML文件和PNG,但是它会生成一组HTML文件,而不是PDF文件。

那么,我已经想出了一个解决scheme,涉及使用qlmanagewkhtmltopdf 。 基本上,我运行qlmanage制作HTML,并使用wkhtmltopdf将HTML转换为PDF。 不幸的是,HTML页面是按照或多或less的随机顺序生成的,所以我需要查看属性列表来确定将哪个页面放在哪里。 幸运的是,在我的工作簿上,页面可以被sorting。

 #!/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']) 

没有写任何代码,我想我可能会签出以下内容:

首先安装CUPS-PDF ,这是一个通用的后脚本后台系统,直接绑定到CUPS,系统OS-X用于打印。 它允许您直接打印到PDF,并在打印菜单中显示为另一个打印机选项。 一旦安装,您可以使用automator从主自动化工作stream程palate中打印任何特定的查找器项目,selectUtilities -> Print Finder Items ,您可以select打印哪个驱动程序,以便您可以selectCUPS-PDF选项。

您可以将您的应用程序保存为液滴或应用程序,并从命令行调用

但是我不确定如何指定参数,比如input文件,这样可能需要一些研究,或者您可能不得不接受只使用automator来获取特定位置的所有finder项目,并事先用bash移动项目。