Скрипт word в pdf

Время на прочтение
3 мин

Количество просмотров 17K

Некоторые гос. структуры формируют отчёты в doc файлах. Где-то это делается руками, а где-то автоматически. Представим, что вам поручено обработать тонну таких документов. Это может быть необходимо для вычленения какой-то конкретной информации или просто проверки содержимого. Нам нужно вынуть только неформатированный текст без графиков и картинок. К примеру, такие данные проще засовывать в нейронную сеть для дальнейшего анализа.

Вот некоторые варианты для самого обычного человека:

  • Ручками перебрать все файлы по одному. Уже после десятого документа к вам придёт мысль о том, что вы делаете что-то не так.
  • Попробовать найти в интернете специальную библиотеку (расширение) для работы с doc файлами на языке программирования, которым вы владеете. Потратить часок другой на понимание, как работать с этой библиотекой. Также вам ещё предстоит столкнуться с тем, что принципы работы с doc и docx слегка отличаются.
  • Попытаться автоматизированно пересохранить все документы в другой формат, с которым будет удобнее работать.

Как раз о последнем варианте и пойдёт речь.

И на помощь к нам спешит vbs скрипт. vbs скрипт можно вызвать из командной строки, что можно сделать в любом языке программирования.

Создадим файл converter.vbs

Const wdFormatText = 2
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Open(Wscript.Arguments.Item(0), True)
objDoc.SaveAs WScript.Arguments.Item(1), wdFormatText
objWord.Quit

В первой строке мы указываем, в какой формат будем конвертировать: 2 — в txt, 17 — в pdf.
Все форматы можно посмотреть тут. Во второй строке мы открываем непосредственно word. После открытия можно добавить следующую строку:

objWord.Visible = TRUE

Это приведёт к тому, что мы будем видеть процесс открытия Word. Это может быть полезно в том случае, если в какой-то момент произойдёт ошибка, word не закроется сам, и без этой строчки процесс можно будет убить только через диспетчер задач, а так мы просто сможем нажать на крестик.

В командной строке скрипт будет запускаться следующим образом:

converter.vbs полный_путь_к_файлуимя_файла.docx полный_путь_куда_сохранитьимя_файла_без_расширения

Wscript.Arguments.Item(0) — это полный_путь_к_файлуимя_файла.docx
WScript.Arguments.Item(1) — полный_путь_куда_сохранитьимя_файла_без_расширения
Соответственно, в третьей строке нашего скрипта мы открываем файл, и на следующей строке сохраняем в указанный формат. И в завершении закрываем word.

Есть ещё одна маленькая нужная хитрость. Иногда из-за разницы в версиях word или по другим причинам, word может ругнуться, сказав, что файл повреждён. При ручном открытии файла мы увидим предупреждение «повреждена таблица, продолжить открытие файла?». И нужно лишь нажать на «Да», но скрипт уже на этом моменте прекратит свою работу.

В vbs очень корявая конструкция «try catch». Обойти данную проблему можно, добавив всего две строчки. Итого полноценный стабильный скрипт выглядит следующим образом:

Const wdFormatText = 2
Set objWord = CreateObject("Word.Application")
objWord.Visible = TRUE
On Error Resume Next
Set objDoc = objWord.Documents.Open(Wscript.Arguments.Item(0), True)
Set objDoc = objWord.Documents.Open(Wscript.Arguments.Item(0), True)
objDoc.SaveAs WScript.Arguments.Item(1), wdFormatText
objWord.Quit

Как вы можете заметить, продублировано открытие файла. В случае, когда с файлом всё в порядке, файл просто откроется два раза, а в случае ошибки просто продолжит открытие файла.

И на всякий пожарный, пример того, как может выглядеть функция на Python

import os
#folder_from = os.getcwd() + r'words' - папка, где лежит тонна word файлов
#folder_to = os.getcwd() + r'txts' - папка, куда будем сохранять 
def convert(file_name):
    str1 = folder_from + r"/" + file_name
    str2 = folder_to + r"/" + file_name[:file_name.rfind('.')] 
    os.system('converter.vbs  "' + str1 + '" "' + str2 + '"') #запуск скрипта

Далее просто применяем эту функцию ко всем файлам, которые нужно конвертнуть.

Итог

  1. Данное решение подходит под все форматы word.
  2. На прочтение этой статьи вы потратили не более 10 минут.
  3. Можно реализовать зная любой язык программирования.

Не знаю, как у вас, а у меня на работе иногда возникала проблема в конвертировании файлов из формата docx в формат pdf, чтобы в последующем разместить эти файлы на сайте. А файлов, иногда, бывало довольно много, потому, требовалось каждый открыть и сохранить в нужный формат. В какой-то момент времени мне это немного надоело и я стал искать способ, как бы автоматизировать данный процесс. И выход нашелся. Я написал небольшой скрипт на python, который конвертировал файлы в pdf автоматом. То есть, выполнял работу за меня.

В общем, это небольшой пост, посвящённый автоматизации )

000.png

Что потребуется?

Для работы скрипта нужно установить модуль docx2pdf. Потому, отрываем терминал и выполняем команду:

pip install docx2pdf

Пишем функцию конвертации

Для того, чтобы конвертировать файл из формата Microsoft Word в PDF, достаточно одной небольшой функции. На входе она будет принимать директорию с файлами docx и конвертировать их по очереди. Впрочем, для того, чтобы исключить попадание конвертеру файлов, расширение которых отлично от docx, сделаем небольшое условие, которое будет проверять файл на необходимое нам расширение. Если расширение другое, то файл будет пропущен, а скрипт продолжит свое выполнение, а не упадет в обмороке.

Вот сама функция, которая нам требуется:

Python:

def file_convert_docx_pdf(dirs):
    file_in_dir = os.listdir(dirs)

    if not os.path.isdir(f'{dirs}\convert_pdf'):
        os.mkdir(f'{dirs}\convert_pdf')

    for file in file_in_dir:
        if file.endswith('.docx'):
            file_k = f'{file.split(".")[0].replace(".", "_")}.pdf'
            convert(f'{dirs}\{file}', f'{dirs}\convert_pdf\{file_k}')
        else:
            continue

Сканируем директорию и получаем список файлов. Дальше проверяем, есть ли папка, в которую надо будет складывать конвертированные файлы. Если такой папки нет – она будет создана. Ну, а потом перебираем в цикле список со сканированными файлами, проверяем их расширение и если расширение docx, формируем новое имя файла, попутно заменяя все точки в имени на «_». Это нужно для того, чтобы скрипт корректно сохранял файл. Если в имени файла попадается точка, то расширение файла сразу же отбрасывается. Ну и дальше конвертеру передается путь к файлу и имя файла для конвертирования, и путь к файлу, и имя файла для сохранения.

screenshot1.png

Пример работы скрипта

Ниже можно посмотреть результат работы скрипта:

screenshot2.png

Как можно заметить, в папке находится один файл в формате doc. Он пропускается, таким образом, из 23 файлов конвертированы только 22.

Вот в принципе и все. Надо отметить, что модуль docx2pdf, как следует из его названия не работает с файлами doc. А потому их, перед тем, как конвертировать нужно так же пересохранить в нужном формате. И тут выход так же нашелся. Но, об этом в следующий раз.

А сейчас, вот полный код скрипта:

Python:

import os

from docx2pdf import convert


def file_convert_docx_pdf(dirs):
    file_in_dir = os.listdir(dirs)

    if not os.path.isdir(f'{dirs}\convert_pdf'):
        os.mkdir(f'{dirs}\convert_pdf')

    for file in file_in_dir:
        if file.endswith('.docx'):
            file_k = f'{file.split(".")[0].replace(".", "_")}.pdf'
            convert(f'{dirs}\{file}', f'{dirs}\convert_pdf\{file_k}')
        else:
            continue


def main():
    dirs = input('Введите папку для сканирования: >> ')
    file_convert_docx_pdf(dirs)
    print(f'n[+] - Конвертация завершена...')


if __name__ == "__main__":
    main()

Надеюсь, что данный скрипт будет кому-то полезен в работе. Спасибо за внимание

Rafael use CreateObject("Word.Application") for creating new MSWord process. In my system this code does not close word process correctly. but this code works correct

Const wdExportAllDocument = 0
Const wdExportOptimizeForPrint = 0
Const wdExportDocumentContent = 0
Const wdExportFormatPDF = 17
Const wdExportCreateHeadingBookmarks = 1

if  Wscript.Arguments.Count > 0 Then
    ' Get the running instance of MS Word. If Word is not running, Create it
    On Error Resume Next
    Set objWord = GetObject(, "Word.Application")
    If Err <> 0 Then
        Set objWord = CreateObject("Word.Application")
    End If
    On Error GoTo 0

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.GetFile(WScript.Arguments(0))
    Set objDoc = objWord.Documents.Open(WScript.Arguments(0),,TRUE)

    'Export to PDF using preferred settings
    pdf = objWord.ActiveDocument.ExportAsFixedFormat( _
        WScript.Arguments(1), _
        wdExportFormatPDF, False, wdExportOptimizeForPrint, _
        wdExportAllDocument,,, _
        wdExportDocumentContent, _
        False, True, _
        wdExportCreateHeadingBookmarks _
    )

    'Quit MS Word
    objWord.DisplayAlerts = False
    objWord.Quit(False)
    set objWord = nothing
    set objFSO = nothing
Else
    msgbox("You must select a file to convert")
End If

If this code save on word2pdf.vbs, it can called by this command at cmd:

wscript word2pdf.vbs input.docx output.pdf

Internship at OpenGenus

Get this book -> Problems on Array: For Interviews and Competitive Programming

Reading time: 10 minutes | Coding time: 15 minutes

In this article you will learn how how to create PDF files out of your word document.Well up until recently, creating complex or elegant PDFs in Javascript has been challenging.Here I’m going to show you step-by-step the path of to create beautiful PDFs.

unnamed

Before we dive further into the process why don’t we learn what is word document or what is PDFs or what is the need to convert word document to PDFs.
Word Document is a popular word-processing program used primarily for creating documents such as letters, brochures, learning activities, tests, quizzes and students’ homework assignments.DOC stands for DOCument file. A DOC file can contain formatted text, images, tables, graphs, charts, page formatting, and print settings.

The Portable Document Format (PDF)is a file format developed by Adobe in the 1990s to present documents, including text formatting and images, in a manner independent of application software, hardware, and operating systems
Yes, PDFs were created to avoid any changes that might occur due change in hardware or software which might have occurred to you if you had ever used Word document.Let’s take a example,Whenever a make a word document and to a printing shop for the print the shop owner may have different OS,hardware or even software and when you get your printed document it is not what you saved at your computer maybe there is a large gap between line format is distorted or something else.So,that’s where PDF come’s to rescue.

Word to PDF approaches

There are three methods that I am going to discuss today which are very easy to use and produce excellent results. These are using:

  • awesome-unoconv
  • libreoffice-convert
  • docx-pdf

1. awesome-unoconv

awesome-unoconv is nodeJS wrapper for converting Office files to PDF or HTML

REQUIREMENT

Unoconv is required, which requires LibreOffice (or OpenOffice)
You can install unoconv in linux operating system by using following command

sudo apt-get install unoconv

INSTALLATION

npm install awesome-unoconv

CODE

const path = require('path');
const unoconv = require('awesome-unoconv');
//Place your word file in source
const sourceFilePath = path.resolve('./word_file.docx');
const outputFilePath = path.resolve('./myDoc.pdf');
 
unoconv
  .convert(sourceFilePath, outputFilePath)
  .then(result => {
    console.log(result); // return outputFilePath
  })
  .catch(err => {
    console.log(err);
  });

Now go to the terminal and run your command pdf will be created in current working directory with name «myDoc.pdf» (you choose any name you like).
This is one of the method to convert word document to pdf let’s keep going.

2. libreoffice-convert

A simple and fast node.js module for converting office documents to different formats.

DEPENDENCY

Since,I am using linux please Install libreoffice in /Applications (Mac), with your favorite package manager (Linux), or with the msi (Windows).

INSTALLATION

npm install libreoffice-convert

CODE

const libre = require('libreoffice-convert');
 
const path = require('path');
const fs = require('fs');
 
const extend = '.pdf'
const FilePath = path.join(__dirname, './word_file.docx');
const outputPath = path.join(__dirname, `./example${extend}`);
 
// Read file
const enterPath = fs.readFileSync(FilePath);
// Convert it to pdf format with undefined filter (see Libreoffice doc about filter)
libre.convert(enterPath, extend, undefined, (err, done) => {
    if (err) {
      console.log(`Error converting file: ${err}`);
    }
    
    // Here in done you have pdf file which you can save or transfer in another stream
    fs.writeFileSync(outputPath, done);
});

Since,This is only for libre-office you might not find it very usefull if you are using windows but for for linux/Mac operating system it is very popular.

Let’s look at the last and third method to convert word document to PDFs

3. docx-pdf

It is a library that converts docx file to pdf and it is one of most optimal and quality wise best among the three and most easiest one also.

INSTALLATION

npm install docx-pdf

CODE

var docxConverter = require('docx-pdf');

docxConverter('./word_file.docx','./output.pdf',function(err,result){
  if(err){
    console.log(err);
  }
  console.log('result'+result);
});

Output should be output.pdf which will be produced on the output path your provided.

Question

Which one of the following is the correct command to install any module/package in your project?

npm install package-name

node install package-name

install package-name

nodejs install package-name

npm install

is the correct syntax,Example:
If you want to install express module you can do it by writing the command
> npm install express

If you want to see the project you can use this link to my github page.

Приветствую всех читателей блога scriptcoding.ru. В этой статье мы рассмотрим, как сохранить документ Word в PDF формате, или в формате XPS.

По умолчанию, само приложение Word не позволяет сохранять документы в заданных форматах (исключением являются последние версии), что немного обидно, учитывая функциональные возможности самой компании Майкрософт. Но это и не удивительно, так как дядюшка Билл любит радовать своего потребителя различными косяками и багами – каких только нецензурных слов удостоился тот же Internet Explorer.

В первую очередь, стоит сообщить хорошую новость – есть расширение «SaveAsPDFandXPS«, которое находится в бесплатном доступе и его можно скачать с официального сайта Майкрософт. После установки данного расширения появляется возможность сохранить страницу как PDF в Word документе, причем, как в ручном режиме (соответствующий тип файла появится в диалоговом окне «Сохранить Как«), так и программным путем.

Собственно, программный метод получения формата pdf мы и рассмотрим, а именно, метод ExportAsFixedFormatобъекта Range, который позволяет экспортировать целиком или частично содержимое документа в нужный формат.

Данный метод содержит много параметров, и поэтому, я решил описать его в отдельной статье.

сохранение докумнта word в pdf

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.

как сохранить документ word в pdf

Программный код на 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. Более детально похожий пример я рассмотрел в этой статье.

Понравилась статья? Поделить с друзьями:
  • Скрипт vba для word
  • Скрипт powershell в excel
  • Скрипт excel перенос данных
  • Скрипт excel для печати
  • Скрипт excel в json