Научная статья на тему 'Автоматизация конвертации документов MS Office в формат pdf на веб-сервере под управлением CentOS Linux'

Автоматизация конвертации документов MS Office в формат pdf на веб-сервере под управлением CentOS Linux Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
231
19
Поделиться
Ключевые слова
PYTHON / LIBREOFFICE / PDF / ОБРАБОТКА ДОКУМЕНТОВ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Авдеев Алексей Васильевич, Шемякин Алексей Сергеевич

В данной работе представлен механизм загрузки документов MS Office на веб-сервер, работающий под управлением OS Linux (CentOS 7.3 x 64), и конвертации загруженных файлов в формат PDF. Механизм загрузки и конвертации файлов реализован на языке Python с использованием фреймворка Django. Конвертация документов MS Office в формат PDF осуществляется при помощи LibreOffice и скрипта Unoconv

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Авдеев Алексей Васильевич, Шемякин Алексей Сергеевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

AUTOMATING CONVERSION OF MS OFFICE DOCUMENTS TO PDF ON A WEB SERVER RUNNING CENTOS LINUX

This paper presents the mechanism of loading of MS Office documents on a web server running OS Linux (CentOS x64 7.3) and convert the downloaded files to a PDF. The mechanics of downloading and converting files is implemented in Python using the framework Django. Convert MS Office documents to PDF format is done using LibreOffice and Unoconv script

Текст научной работы на тему «Автоматизация конвертации документов MS Office в формат pdf на веб-сервере под управлением CentOS Linux»

УДК 004.91

А.В. Авдеев, А.С. Шемякин

Институт информатики и математического моделирования технологических процессов Кольского НЦ РАН

АВТОМАТИЗАЦИЯ КОНВЕРТАЦИИ ДОКУМЕНТОВ MS OFFICE В ФОРМАТ PDF НА ВЕБ-СЕРВЕРЕ ПОД УПРАВЛЕНИЕМ CENTOS LINUX*

Аннотация

В данной работе представлен механизм загрузки документов MS Office на вебсервер, работающий под управлением OS Linux (CentOS 7.3 x 64), и конвертации загруженных файлов в формат PDF. Механизм загрузки и конвертации файлов реализован на языке Python с использованием фреймворка Django. Конвертация документов MS Office в формат PDF осуществляется при помощи LibreOffice и скрипта Unoconv.

Ключевые слова:

python, LibreOffice, PDF, обработка документов.

A.V. Avdeev, A.S. Shemyakin

AUTOMATING CONVERSION OF MS OFFICE DOCUMENTS TO PDF ON A WEB SERVER RUNNING CENTOS LINUX

Abstract

This paper presents the mechanism of loading of MS Office documents on a web server running OS Linux (CentOS x64 7.3) and convert the downloaded files to a PDF. The mechanics of downloading and converting files is implemented in Python using the framework Django. Convert MS Office documents to PDF format is done using LibreOffice and Unoconv script.

Keywords:

python, LibreOffice, PDF, document processing.

В [4] была представлена программная система, позволяющая автоматизировать разработку планирующей документации. Система позволяет загружать документы в формате MS Office - doc, rtf, docx, odt. Хранение в базе данных файлов в таком формате не представляет сложностей, однако возникают проблемы с отображением таких файлов в окне браузера - требуется предварительная конвертация в формат HTML. Такая конвертация требует использования сторонних библиотек, например, Aspose [2]. Следует отметить, что на возможность выбора библиотеки может существенно повлиять выбор языка программирования, на котором создается программная система.

Формат HTML рассчитан на отображение текста с простым форматированием и не предназначен для отображения сложных документов, содержащих, например, колонтитулы, формулы, разделы с различным форматированием. Формат PDF позволяет обойти эти ограничения, т.к. предназначен для представления полиграфической продукции в электронном виде [3].

* Работа выполнена при поддержке РФФИ, проекты № 15-29-06973, № 16-07-00562.

В настоящее время современные браузеры имеют встроенные средства для отображения PDF. Представляется целесообразной идея конвертации документов в данный формат, а затем удобный их просмотр средствами браузера. В данной работе представлен механизм пакетной загрузки файлов MS Office на сервер, работающий под управлением OS Linux (CentOS 7.3 x 64), и дальнейшая автоматическая пакетная конвертация загруженных файлов в формат PDF. В ходе работы с системой [1] у пользователя может возникнуть необходимость загрузить большое количество документов различных форматов на веб-сервер; чтобы избавить пользователя от рутинной процедуры конвертирования каждого загружаемого файла в формат PDF вручную предусмотрен механизм пакетной загрузки и конвертирования загруженных файлов. Для решения этой задачи и были выбраны следующие инструменты:

• веб-фреймворк Django 1.10.3 (модифицированная лицензия BSD) -свободный фреймворк на языке Python для веб-приложений [4].

• Unoconv (лицензия GNU GPL) - скрипт-обёртка для работы с OpenOffice (Лицензия Apache) [5].

• LibreOffice (лицензия GNU GPL и MPL) - свободнораспост-раняемый офисный пакет с открытым исходным кодом, ответвление OpenOffice [6].

• расширенный текстовый редактор Atom (лицензия MIT) с плагинами ftp-remote-edit (MIT), python-indent (MIT) и др. [7].

Unoconv - консольная программа, предназначенная для преобра-зования офисных форматов между собой. Она использует надстройку (интерфейс/API) UNO в LibreOffice для интерактивного преобразования документов и, следовательно, нуждается в установленном LibreOffice или OpenOffice. Данная программа удобна пакетной автоматической конвертации форматов между собой.

Пример вызова программы из командной строки: unoconv - f pdf some-file.odt. В данном примере аргумент "-f' указывает на конечный формат документа, а аргумент "some-file.odt" - на документ, который нужно преобразовать. При выполнении данной команды из директории, в которой находится файл "some-file.odt" мы получим в этой же директории файл "some-file.pdf". Для пакетного преобразования. например, всех файлов формата doc, достаточно последним аргументом передать "*.doc".

Фреймворк примерно соответствует архитектуре MVC ("модель — вид — контроллер"), точнее ему соответствует модель MTV ("модель — шаблон — вид") [8].

Согласно архитектуре фреймворка Django приложение разбито на логические составляющие: модель, шаблон и вид (представление) (рис.).

Архитектура MTV

Для хранения документов, загружаемых на сервер, в базе созданы следующие модели:

1 from future import unicode literals

2 from django.db import models

3 class Doc(models.Model):

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

4 title = models.CharField(max length=255, blank=True)

5 file = models.FileField(upload to='doc/')

6 uploaded at = models.DateTimeField(auto now add=True)

7 parrent dir = models.ForeignKey('Dirs', blank=True)

8

9 class Dirs(models.Model):

10 dir name = models.CharField(max length=255, blank=True)

Данная модель описывает две таблицы в создаваемой БД. «Doc» служит для хранения информации о загружаемых файлах, «Dirs» хранит информацию о принадлежности документа к определенной категории.

В строке 3 объявляется функция Doc, которая служит для генерации новой таблицы в БД. В строке 4 задается название документа, в строке 5 задается путь до конечной папки загрузки (относительно папки с проектом), а в строке 6 - дата создания записи.

Следующий компонент архитектуры МУС - вид, отвечающий за обработку загрузки файлов в проект.

1 from django.views import View

2 import subprocess, os

3 from .forms import DocForm

4 from .models import Doc

10 class ProgressBarUpload (View):

12 def get(self, request):

13 docs list = Doc.objects.all()

14 return render(self.request, 'docs/progress bar upload/index.html', {'docs': docs_list})

15 def post(self, request):

16 form = DocForm(self.request.POST, self.request.FILES)

17 if form.is valid():

18 doc = form.save()

19 data = {'is valid': True, 'name': doc.file.name, 'url': doc.file.url}

20 else:

21 data = {'is_valid': False}

22 return JsonResponse(data)

Данная функция выполняет загрузку файлов, а JavaScript на странице пользователя показывает прогресс данной операции, в строках 19 - 22 происходит асинхронная (без перезагрузки страницы) передача данных.

Там же в представлении выполняется преобразование файлов в формат

Pdf:

41 def all to pdf(request):

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

42 doc list = Doc.objects.all()

43 pa = '/home/user/doc env/multiple/media/'

44 for doc in doc_list:

45 if doc.file.name.split('.')[1] != 'pdf': 4 6 pam = doc.file.name

47 subprocess.call('unoconv '+pa+pam, shell=True)

48 dox = '.'+(pam.split('.')[-1])

49 Doc.objects.filter(file = pam).update(file = pam.replace(dox,".pdf"))

50 return render(request,

'docs/progress bar upload/index.html', {'docs': doc list})

В строке 41 объявляется функция для преобразования, переменная «pa» (строка 43) хранит путь до рабочего каталога с документами, далее циклом (строки 44 - 49) перебираем все файлы в БД. Если файл имеет формат отличный

от PDF (строка 45), то в переменную «pam» записывается путь относительно рабочей папки и передается процессу «unoconv» с указанием пути к файлу (строка 47, shell=True служит для получения отладочной информации).

Собственно конвертация осуществляется вызовом функции subprocess.call.

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None) - выполняет команду, описанную args. Ожидает завершения команды, а затем возвращает код возврата. Например, команда «subprocess.caU('uname -r', shell=True)» выведет номер выпуска операционной системы (для CentOS 7.3 x64 установленной на сервере - «2.6.32-042stab123.3»)

[9].

Далее запись о первоначально загруженном файле в БД заменяется новой записью о файле уже с расширением PDF.

Последний компонент архитектуры MVC - шаблон, служит для вывода списка доступных для просмотра документов уже непосредственно языком HTML в браузере пользователя:

1{% extends "docs/base.html" %} 2{% load static %} 3{% block docs_content %} 4

5<table id-'gallery" class="table table-bordered">

6 <tbody>

7{% for doc in docs %}

8 <tr>

9 <td><ahref="{{ doc.file.url }}">{{ doc.file.name }}</a></td>

10 </tr> 11{% endfor %} 12</tbody> 13</table>

14

15{% endblock %} Заключение

В данной работе представлен механизм загрузки документов MS Office на сервер, работающий под управлением OS Linux (CentOS 7.3 x 64), и конвертации загруженных файлов в формат PDF. Механизм загрузки и конвертации файлов реализован на языке Python с использованием фреймворка Django. Конвертация документов MS Office в формат PDF осуществляется при помощи LibreOffice и скрипта Unoconv.

Поскольку все используемые инструменты являются свободно распространяемыми программными продуктами, то использование связки LibreOffice+Unoconv+PDF позволяет существенно сократить расходы на серверное программное обеспечение.

Литература

1. Шемякин, А.С. Автоматизация разработки планирующей документации по снижению промышленно-экологических рисков / А.С. Шемякин, С.Ю. Яковлев, Ю.А. Олейник, А.В. Маслобоев // Вестник Иркутского государственного технического университета. - 2016. -Т.20. -№9. -С.74-85. DOI: 10.21285/1814-3520-2016-9-74-85.

2. NET Java Android SharePoint Cloud APIs for Word Document formats.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

- Режим доступа: https: //www.aspose .com/products/words

3. Portable Document Format. - Режим доступа: https://ru.wikipedia.org/wiki/Portable Document Format

4. Django makes it easier to build better Web apps more quickly and with less code.

- Режим доступа: https://www.djangoproject.com/

5. Universal Office Converter - Convert between any document format supported by LibreOffice/OpenOffice.

- Режим доступа: https: //github.com/dagwieers/unoconv

6. LibreOffice - мощный офисный пакет, полностью совместимый с 32/64-битными системами. - Режим доступа: http://ru.libreoffice.org/

7. A hackable text editor. - Режим доступа: https://atom.io/

8. Django Documentation. FAQ: General. - Режим доступа: https://docs.djangoproject.com/en/1.11/faq/general/

9. Subprocess - Subprocess management. - Режим доступа: https://docs.python.org/3/library/subprocess.html

Сведения об авторах

Шемякин Алексей Сергеевич - младший научный сотрудник,

е-mail: shemyakin@iimm. ru

Alexey S. Shemyakin - junior researcher

Авдеев Алексей Васильевич - стажер-исследователь,

e-mail: avdccv@iimm.ru

Alexey V. Avdeev - research assistant