Автоматизація обробки текстових документів за допомогою 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.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.