Автоматизация обработки текстовых документов с помощью Microsoft Word API

от автора

Значительная часть текстовых документов сегодня создаётся и редактируется в программе Microsoft Word. Наличие этой программы практически на каждом компьютере даёт возможность автоматизировать печать, обработку и экспорт текстовых документов в PDF, используя API Microsoft Word.

В этой статье я расскажу, как автоматизировать печать текстовых документов и конвертирование документов в формат PDF.

Пример исходного кода для печати текстового документа, написанный на языке Microsoft Visual Basic.NET, выглядит так:

Dim app = CreateObject("Word.Application") Dim doc = app.Documents.Open("D:\in\my 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:\in\my 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:\in\my resume.doc")  doc.ExportAsFixedFormat("D:\out\my 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.

ссылка на оригинал статьи https://habrahabr.ru/post/275989/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *