Я попробовал принятый ответ, но мне не особенно понравились раздутые PDF-файлы, которые выпускал Word, которые обычно были на порядок больше, чем ожидалось.Посмотрев, как отключить диалоги при использовании виртуального PDF-принтера, я наткнулся на Bullzip PDF Printer, и я был довольно впечатлен его возможностями.Теперь он заменяет другие виртуальные принтеры, которые я использовал ранее.На их странице загрузки вы найдете «бесплатную версию сообщества».
COM API можно найти здесь , а список доступных настроек можно найти здесь .Настройки записываются в файл runonce, который используется только для одного задания на печать, а затем автоматически удаляются.При печати нескольких PDF-файлов нам необходимо убедиться, что одно задание на печать завершено, а затем запустить другое, чтобы обеспечить правильное использование настроек для каждого файла.
import os, re, time, datetime, win32com.client
def print_to_Bullzip(file):
util = win32com.client.Dispatch("Bullzip.PDFUtil")
settings = win32com.client.Dispatch("Bullzip.PDFSettings")
settings.PrinterName = util.DefaultPrinterName # make sure we're controlling the right PDF printer
outputFile = re.sub("\.[^.]+$", ".pdf", file)
statusFile = re.sub("\.[^.]+$", ".status", file)
settings.SetValue("Output", outputFile)
settings.SetValue("ConfirmOverwrite", "no")
settings.SetValue("ShowSaveAS", "never")
settings.SetValue("ShowSettings", "never")
settings.SetValue("ShowPDF", "no")
settings.SetValue("ShowProgress", "no")
settings.SetValue("ShowProgressFinished", "no") # disable balloon tip
settings.SetValue("StatusFile", statusFile) # created after print job
settings.WriteSettings(True) # write settings to the runonce.ini
util.PrintFile(file, util.DefaultPrinterName) # send to Bullzip virtual printer
# wait until print job completes before continuing
# otherwise settings for the next job may not be used
timestamp = datetime.datetime.now()
while( (datetime.datetime.now() - timestamp).seconds < 10):
if os.path.exists(statusFile) and os.path.isfile(statusFile):
error = util.ReadIniString(statusFile, "Status", "Errors", '')
if error != "0":
raise IOError("PDF was created with errors")
os.remove(statusFile)
return
time.sleep(0.1)
raise IOError("PDF creation timed out")