Mac: как конвертировать файлы Excel (и другие) в PDF программно

Я заинтересован в программном преобразовании электронной таблицы 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.

Ну, я придумал решение, которое включает использование 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']) 

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

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

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

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

  • Почему мой Excel поврежден каждый раз, когда я вставляю более 21 пользователя, набирая XML или через C #?
  • Как преобразовать xls-файл в xml?
  • Недопустимый заголовок чтения xls-файла
  • Защитить файл excel с помощью java
  • Поддержка файлов android xls
  • Можете ли вы использовать один и тот же экземпляр рабочей книги xlwt в разных функциях?
  • Чтение нескольких столбцов файла Excel (.xls) в Java
  • Библиотека xlrd не работает с файлами xlsx. Любой способ скрывать xlsx до xls с помощью python?
  • Как читать и разбирать файлы excel в Lua?
  • Как преобразовать в массив с ключами из первой строки PHPExcel?
  • Highcharts экспортирует еще раз
  • Interesting Posts

    xlfillseries не работает в userform для vba?

    VBA – обновление экрана не работает должным образом

    При расчете рабочего листа

    vba excel userform не покажет

    Нормализовать данные в excel

    Как использовать функцию SUMIF в Excel или что-то подобное для подсчета появления * слова * в пределах заданного диапазона?

    Порядок сортировки Excel – специальные символы не первые

    Единичный тест с ошибкой Microsoft.Office.Interop на сервере сборки

    Получение следующей строки при попытке удалить ряд строк с помощью vba. Что не так

    Ускорение макроса VBA с несколькими операциями «For» и «if»

    Excel vba: неправильное количество аргументов или недопустимое добавление коллекции свойств

    Excel VBA Подождите, пока Shell закончит работу, прежде чем продолжить сценарий

    VBA – исключение исключений для конкретных ошибок в рабочем коде, проблема IsNumeric?

    VLOOKUP на нескольких листах, не работающих

    Объяснение – Копирование данных кода VBA с помощью PasteSpecial

    Давайте будем гением компьютера.