Mac: Как программно конвертировать Excel (и другие) типы файлов в PDF - PullRequest
1 голос
/ 11 марта 2011

Я заинтересован в программном преобразовании электронной таблицы / рабочей книги Excel в файл PDF.Другие задавали и отвечали на этот вопрос (см. Как программно конвертировать документы Word и Excel в PDF? и конвертировать Excel в PDF в Python ), но ни один из них не делает то, что я хочу сделать:

  1. Мне нужен инструмент командной строки, который не требует использования Microsoft Office.
  2. Я бы хотел, чтобы он работал на Mac.
  3. Я хочу сделать полную таблицу;решение Perl работает только с константами.
  4. Я бы хотел использовать то, что уже отлажено, вместо написания кода.

Мне кажется, что это простой способ сделать этодолжно быть с системой «Quick Look», встроенной в MacOS.В MacOS есть способы предварительного просмотра любого документа (выберите его в Finder и нажмите пробел).У этого также есть способы преобразовать вещи в PDF.Должен быть способ использования встроенных знаний Apple о том, как отображать файлы XLS и XLSX.Я просто не знаю, как использовать QuickLook из командной строки и как заставить его выводить PDF в файл.

Apple предоставляет программу под названием qlmanage, которая может использоваться для программного создания файлов HTML и PNG, но она создает набор файлов HTML, а не файл PDF.

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

Ну, я придумала решение, которое включает в себя qlmanage и wkhtmltopdf.По сути, я запускаю 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 голос
/ 11 марта 2011

Без написания какого-либо кода, я думаю, я мог бы проверить следующее:

первая установка CUPS-PDF , которая является общей фоновой системой после сценария, которая напрямую связана с CUPS, которую OS-X использует для печати. Он позволяет вам печатать напрямую в формате PDF и выглядит как просто еще одна опция принтера в меню печати. После установки вы можете использовать automator для печати любого конкретного элемента поиска, в меню рабочего процесса главного автоматизатора выберите Utilities -> Print Finder Items, и вы можете выбрать, какой драйвер печатать, поэтому вы можете выбрать опцию CUPS-PDF.

вы можете сохранить свое приложение в виде капли или приложения и вызвать из командной строки

Но я не был бы уверен, как указать аргументы, такие как входные файлы, так что это может потребовать некоторых исследований, или вам, возможно, придется согласиться только с использованием automator, чтобы получить все элементы поиска в определенном месте и переместить их туда с помощью bash заранее.

...