Приветствую всех читателей блога scriptcoding.ru. В этой статье мы рассмотрим, как сохранить документ Word в PDF формате, или в формате XPS.
По умолчанию, само приложение Word не позволяет сохранять документы в заданных форматах (исключением являются последние версии), что немного обидно, учитывая функциональные возможности самой компании Майкрософт. Но это и не удивительно, так как дядюшка Билл любит радовать своего потребителя различными косяками и багами – каких только нецензурных слов удостоился тот же Internet Explorer.
В первую очередь, стоит сообщить хорошую новость – есть расширение «SaveAsPDFandXPS«, которое находится в бесплатном доступе и его можно скачать с официального сайта Майкрософт. После установки данного расширения появляется возможность сохранить страницу как PDF в Word документе, причем, как в ручном режиме (соответствующий тип файла появится в диалоговом окне «Сохранить Как«), так и программным путем.
Собственно, программный метод получения формата pdf мы и рассмотрим, а именно, метод ExportAsFixedFormatобъекта Range, который позволяет экспортировать целиком или частично содержимое документа в нужный формат.
Данный метод содержит много параметров, и поэтому, я решил описать его в отдельной статье.
ExportAsFixedFormat(OutputFileName, ExportFormat, OpenAfterExport, OptimizeFor, ExportCurrentPage, Item, IncludeDocProps, KeepIRM, CreateBookmarks, DocStructureTags, BitmapMissingFonts, UseISO19005_1, FixedFormatExtClassPtr) — Сохраняет часть документа Word как PDF или XPS формат. Только первые два параметра являются обязательными.
OutputFileName– Обязательный параметр, который задает путь и имя сохраняемого в Word PDF или XPS-файла.
ExportFormat– Обязательный параметр, который определяет формат сохранения в Word (PDF или XPS). Значение константы WdExportFormat:
- wdExportFormatPDF — 17 — Экспортировать документ в формате PDF.
- wdExportFormatXPS — 18 — Экспортировать документ в формате XML Paper Specification (XPS).
OpenAfterExport— Открыть новый файл после экспорта содержимого – значение true.
OptimizeFor– Параметр указывает, следует ли оптимизировать файл для экрана или для печати. Значение константы WdExportOptimizeFor:
- wdExportOptimizeForOnScreen — 1 – Для экрана — низкое качество и маленький размер.
- wdExportOptimizeForPrint — 0 — Для печати – высокое качество и большой размер.
ExportCurrentPage– Определяет, что нужно экспортировать, всю страницу (true) или только выбранный диапазон (false). Word сохранение в PDF.
Item— Определяет процесс экспорта — включать только текст или текст с разметкой. Значение константы WdExportItem:
- wdExportDocumentContent — 0 — Экспорт документа без разметки.
- wdExportDocumentWithMarkup — 7 — Экспорт документа с разметкой.
IncludeDocProps— Указывает, следует ли включить свойства документа в недавно экспортируемый файл (true). Сохранить как PDF в Word.
KeepIRM— Указывает, следует ли копировать права доступа IRM в XPS документ, если исходный документ имеет защиту IRM. Значение по умолчанию True.
CreateBookmarks — Указывает, следует ли экспортировать закладки и тип закладки. Значение константы WdExportCreateBookmarks:
- wdExportCreateHeadingBookmarks — 1 — Создание закладки в экспортируемом документе для всех заголовком, которые включают только заголовки внутри основного документа и текстовые поля не в пределах колонтитулов, концевых сносок, сносок или комментариев.
- wdExportCreateNoBookmarks — 0 — Не создавать закладки в экспортируемом документе.
- wdExportCreateWordBookmarks — 2 — Создание закладки в экспортируемом документе для каждой закладки, которая включает все закладки кроме тех, которые содержатся в верхнем и нижнем колонтитулах.
DocStructureTags— Указывает, следует ли включать дополнительные данные, которые помогут при чтении с экрана, например информацию о потоке и логическую организацию содержимого. Значение по умолчанию True. Документ Word сохранить в PDF.
BitmapMissingFonts— Указывает, следует ли включать растровое изображение текста. Установите этот параметр в значение True, когда шрифт не поддерживается в PDF.
UseISO19005_1 и FixedFormatExtClassPtr – Данные параметры не предоставляют практического интереса.
Теперь давайте рассмотрим два примера программного кода – на языке VBScript и JScript. Оба примера создают новый документ Word, далее вставляют в него текст, содержащий информацию о сервере сценариев Windows Script Host.
Программный код на VBSCRIPT:
' ---------------------------------------------------------------------------- ' Как документ word сохранить в pdf формате ' ExportAsFixedFormat.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, oFont, oShell, oRange, oPars, cur_dir, REnd set oWord = WScript.CreateObject("Word.Application") set oShell = WScript.CreateObject("WScript.Shell") set oDoc = oWord.Documents oDoc.Add() set oSel = oWord.Selection oWord.Visible = True set oFont = oSel.Font set oRange = oDoc(1).Range() 'Текущий каталог cur_dir = oShell.CurrentDirectory with oFont .Size = 20 .Name = "Times New Roman" .Bold=true .Colorindex=2 end with oSel.TypeText "Word - сохранение в PDF" with oFont .Size = 12 .Bold=false .Colorindex=0 end with With oSel .TypeParagraph .TypeParagraph End With ' документ word сохранить в pdf With WScript call TXInsert("Name: ", .Name & "") call TXInsert("FullName: ", .FullName & "") call TXInsert("ScriptName: ", .Name & "") call TXInsert("ScriptFullName: ", .FullName & "") call TXInsert("Path: ", .Path & "") call TXInsert("Version: ", .Version & "") call TXInsert("Application: ", .Application & "") call TXInsert("Timeout: ", .Timeout & "") call TXInsert("BuildVersion: ", .BuildVersion & "") End With set oPars = oRange.Paragraphs REnd = oPars(oPars.Count).Range.End call LRange(4,7) With oRange ' Сохраняем абзацы с 4 по 7 в PDF формате .ExportAsFixedFormat cur_dir & "\WscInfo_VBS.pdf", 17, true .setRange 0, REnd ' Сохраняем весь документ Word в PDF формате .ExportAsFixedFormat cur_dir & "\WscInfoFull_VBS.pdf", 17, true End With ' Используем метод SaveAs для сохранения документа oDoc(1).SaveAs cur_dir & "\WscInfoFull_SaveAs_VBS.pdf", 17 ' процедура выбора диапазона Sub LRange(a, b) With oRange .setRange 0, REnd .setRange oPars(a).Range.Start, oPars(b).Range.End End With End Sub ' Процедура для форматирования шрифта и вставки абзаца как сохранить ворд в пдф Sub TXInsert(a, b) With oSel oFont.Bold=true .TypeText a .EndOf oFont.Bold=false .TypeText b .TypeParagraph End With End Sub |
Программный код на JSCRIPT:
// ---------------------------------------------------------------------------- // Как документ word сохранить в pdf формате // ExportAsFixedFormat.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, oFont1, oShell1, oRange1, oPars1, CurDir1, REnd; oWord1 = WScript.CreateObject("Word.Application"); oShell1 = WScript.CreateObject("WScript.Shell"); oDoc1 = oWord1.Documents; oDoc1.Add(); oSel1 = oWord1.Selection; oWord1.Visible = true; oFont1 = oSel1.Font; oRange1 = oDoc1(1).Range(); //Текущий каталог CurDir1 = oShell1.CurrentDirectory; with(oFont1){ Size = 20; Name = "Times New Roman"; Bold=true; Colorindex=2; } oSel1.TypeText("Word - сохранение в PDF"); with(oFont1){ Size = 12; Bold=false; Colorindex=0; } oSel1.TypeParagraph(); oSel1.TypeParagraph(); // документ word сохранить в pdf with(WScript){ TXInsert("Name: ", Name + ""); TXInsert("FullName: ", FullName + ""); TXInsert("ScriptName: ", Name + ""); TXInsert("ScriptFullName: ", FullName + ""); TXInsert("Path: ", Path + ""); TXInsert("Version: ", Version + ""); TXInsert("Application: ", Application + ""); TXInsert("Timeout: ", Timeout + ""); TXInsert("BuildVersion: ", BuildVersion + ""); } oPars1 = oRange1.Paragraphs; REnd = oPars1(oPars1.Count).Range.End; LRange(4,7); with(oRange1){ // Сохраняем абзацы с 4 по 7 в PDF формате ExportAsFixedFormat (CurDir1 + "\\WscInfo_JS.pdf", 17, true); setRange(0, REnd); // Сохраняем весь документ Word в PDF формате ExportAsFixedFormat (CurDir1 + "\\WscInfoFull_JS.pdf", 17, true); } // Используем метод SaveAs для сохранения документа oDoc1(1).SaveAs(CurDir1 + "\\WscInfoFull_SaveAs_JS.pdf", 17); // процедура выбора диапазона function LRange(a, b){ with(oRange1){ setRange(0, REnd) setRange(oPars1(a).Range.Start, oPars1(b).Range.End) } } // Процедура для форматирования шрифта и вставки абзаца как сохранить ворд в пдф function TXInsert(a, b){ with(oSel1){ oFont1.Bold=true; TypeText(a); EndOf(); oFont1.Bold=false; TypeText(b); TypeParagraph(); } } |
Сами сценарии сохраняют документ Word в формате PDF в текущем каталоге, то есть, в каталоге, из которого произошел запуск сценария. Две функции LRange и TXInsert позволяют выбрать нужный диапазон текста (точнее нужные абзацы) и применить форматирование текста (тип шрифта и размер). Метод SaveAs также позволяет сохранить документ Word в PDF формате или в любом другом формате, данный метод принадлежит объекту Document. Более детально похожий пример я рассмотрел в этой статье.