繁体   English   中英

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

[英]Mac: How to convert Excel (and other) file types to PDF programmatically

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

  1. 我想要一个不需要使用Microsoft Office的命令行工具。
  2. 我希望它可以在Mac上运行。
  3. 我希望它可以完成整个电子表格; Perl解决方案仅处理常量。
  4. 我想使用已经调试过的东西,而不是编写代码。

在我看来,一种简单的方法应该是使用MacOS内置的“ Quick Look”系统。 MacOS具有预览任何文档的方法(在Finder中选择它并按空格)。 它还具有将内容转换为PDF的方法。 应该有一种利用Apple内置的知识来呈现XLS和XLSX文件的方法。 我只是不知道如何从命令行使用QuickLook,以及如何获取它以将PDF输出生成文件。

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

好吧,我想出了一个解决方案,涉及使用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'])

如果不编写任何代码,我想我可以签出以下内容:

首先安装CUPS-PDF ,这是一个通用的后脚本后台系统,直接与CUPS联系在一起,OS-X用于打印的系统。 它允许您直接打印为pdf,并在打印菜单中仅作为另一个打印机选项出现。 安装完成后,您可以使用自动器来打印任何特定的查找器项目,在自动器的主要工作流程中,选择Utilities -> Print Finder Items然后选择要打印的驱动程序,因此可以选择CUPS-PDF选项。

您可以将应用程序另存为Droplet或应用程序,然后从命令行调用

但是我不确定如何指定参数(例如输入文件),因此可能需要进行一些研究,或者您可能不得不接受仅使用automator将所有查找程序项放在特定位置并事先使用bash将其移动到那里的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM