Значительная часть текстовых документов сегодня создаётся и редактируется в программе Microsoft Word. Наличие этой программы практически на каждом компьютере даёт возможность автоматизировать печать, обработку и экспорт текстовых документов в PDF, используя API Microsoft Word.
В этой статье я расскажу, как автоматизировать печать текстовых документов и конвертирование документов в формат PDF.
Пример исходного кода для печати текстового документа, написанный на языке Microsoft Visual Basic.NET, выглядит так:
Dim app = CreateObject("Word.Application")
Dim doc = app.Documents.Open("D:inmy resume.doc")
app.PrintOut(False)
doc.Close()
app.Quit()
Этот код выглядит очень просто. Но для автоматизации печати списка документов следует учесть ряд нюансов:
1. Людям нужна возможность задавать имя используемого принтера
2. Нужно заставить программу Word работать в невидимом режиме, а не появляться на экране при обработке каждого документа
3. Нужно отключить все информационные сообщения и запросы на подтверждение операций с документами
4. Нужно отключить добавление обработанных в автоматическом режиме файлов в список «Recent files».
Доработанный вариант нашей программы будет выглядеть так:
Dim app = CreateObject("Word.Application")
app.Visible = False
app.DisplayAlerts = 0
app.FeatureInstall = 0
app.DisplayRecentFiles = False
app.DisplayDocumentInformationPanel = False
app.AutomationSecurity = 3
Dim wdOptions = app.Options
wdOptions.WarnBeforeSavingPrintingSendingMarkup = False
wdOptions.SavePropertiesPrompt = False
wdOptions.DoNotPromptForConvert = True
wdOptions.PromptUpdateStyle = False
wdOptions.ConfirmConversions = False
Dim doc = app.Documents.Open("D:inmy resume.doc")
doc.Application.ActivePrinter = "Xerox Global Print Driver PS"
app.PrintOut(False)
doc.Saved = True
doc.Close(0)
app.Quit()
Я считаю, что этого кода вполне достаточно, что бы сдать зачёт по программированию в университете. Но до внедрения его в коммерческое приложение следует решить еще несколько вопросов.
1. Этот код не будет работать, если входной файл имеет атрибут «Read only».
2. Производительность вашей программы можно увеличить в несколько раз, если открывать и закрывать только документы, а приложение Microsoft Word оставлять открытым.
3. Многим пользователям нужна возможность печати только заданного диапазона страниц, а не всего документа целиком, а так же возможность напечатать несколько копий документа.
4. Этот код не будет работать, если ваша программа запущена из Windows Tasks Scheduler или от имени Windows Service.
В этой статье я не стану рассказывать о том, как решить эти четыре задачи, что бы не делать жизнь моих читателей слишком скучной. Скажу лишь, что в программах Print Conductor, FolderMill и 2Printer они были мной успешно решены.
Для конвертирования документа в PDF нужно заменить функцию PrintOut на ExportAsFixedFormat. После этого наш код будет выглядеть так:
Dim app = CreateObject("Word.Application")
app.Visible = False
app.DisplayAlerts = 0
app.FeatureInstall = 0
app.DisplayRecentFiles = False
app.DisplayDocumentInformationPanel = False
app.AutomationSecurity = 3
Dim wdOptions = app.Options
wdOptions.WarnBeforeSavingPrintingSendingMarkup = False
wdOptions.SavePropertiesPrompt = False
wdOptions.DoNotPromptForConvert = True
wdOptions.PromptUpdateStyle = False
wdOptions.ConfirmConversions = False
Dim doc = app.Documents.Open("D:inmy resume.doc")
doc.ExportAsFixedFormat("D:outmy resume.pdf", 17)
doc.Saved = True
doc.Close(0)
app.Quit()
Этот пример будет работать, если на вашем компьютере Microsoft Word 2007 SP2 или его более новая версия.
Функция ExportAsFixedFormat не будет работать, если на компьютере не установлено ни одного принтера. Либо если один из установленных принтеров не назначен в качестве system default printer.
Код экспорта документов в PDF можно улучшить, реализовав возможность экспорта части страниц документа, а так же возможность экспорта документов в PDF/A. Обе эти возможности компания Microsoft реализовала в функции ExportAsFixedFormat.
Примеры коммерческих приложений, использующих этот код для конвертирования документов в PDF: DocuFreezer и FolderMill.
Автор: MikhaelBolgov