Pull to refresh

Comments 18

Прошу меня понять и простить:


import sys
import os,os.path
import comtypes.client

wdFormatPDF = 17

input_dir = 'input directory'
output_dir = 'output directory'

for subdir, dirs, files in os.walk(input_dir):
    for file in files:
        in_file = os.path.join(subdir, file)
        output_file = file.split('.')[0]
        out_file = output_dir+output_file+'.pdf'
        word = comtypes.client.CreateObject('Word.Application')

        doc = word.Documents.Open(in_file)
        doc.SaveAs(out_file, FileFormat=wdFormatPDF)
        doc.Close()
        word.Quit()

Взято тут: https://stackoverflow.com/questions/29637626/converting-rtf-to-pdf-using-python

Интересный вариант, спасибо.
Моё решение не только для питонистов.
UFO just landed and posted this here
Там совместимость между версиями вордов — так себе.
Пока идёт простыня текста или простенькая таблица — всё хорошо. А как документ составит какой-нибудь извращеннец-умелец, тут оно и может поломаться.
Принтер, шрифты, монитор, версии Офиса и Винды (кто сохранял, кто открыл) — мал-мала влияют на результат.
Напомнило то, как я лет 6 назад дергал из C++ объект 'Word.Application' для автоматизации генерации отчетов по лабам)

Есть ощущение, что с таким уровнем лабы как минимум по программированию можно было не делать ;)

Уровень уровнем, а учебный план (в т.ч. лабы) никто не отменял =) разве что досрочно сдать можно (экзамен в том числе).

П.С. можно конечно заморочится и сделать индивидуальный, но я не представляю что для этого нужно =)
Если пакета Office не стоит на машине пользователя/сервере или нужно делать такую операцию «в облаке», то задача приобретает иные краски.
Когда-то использовал вот это github.com/zrrrzzt/tfk-api-unoconv

На очень сложных документах «вёрстка», конечно, может сломаться. Но у меня были документы со сложными таблицами/графиками — работало неплохо.
Но ворд же со времен версии 2007 ставит виртуальный PDF принтер через который и так всё превращается в нормальный PDF
Если честно, то посыла статьи толком не понял. Сначала хотели
Это может быть необходимо для вычленения какой-то конкретной информации или просто проверки содержимого
, потом решили конвертировать из одного формата в другой, да причем на VBS… Язык был выбран скорее всего по причине — когда-то его учили…

Если нужно переводить из одного формата в другой очень большое количество документов, то можно поставить на компьютер документооборот Alfresco (бесплатный). И настроить правило — все что попадает в одну папку, конвертируется и кладется в другую папку.
Удобно тем, что — можно настроить сборщик с почты, примонтировать папки и ни кто даже и знать не будет что все идет через документооборот, полностью автоматизировав процесс) без программирования.
В Open/LibreOffice появился headless режим, что сильно ускорило запуск для подобных задач
ext = 'html'
os.chdir(oo_path)
try:
    subprocess.check_call(oo_executable + ' --headless --convert-to ' + ext + ' --outdir ' + destPath + ' ' + srcFile, shell=True)
except subprocess.CalledProcessError as e:
    print(e.output)

Конвертит все что сможет открыть. Кросплатформенно. Бесплатно.

Возможно вам понравится: doc2html. Из недостатков
— некроссплатформенно, потому что использует jscript и
— требует наличие установленного в системе ворда


Из плюсов
— быстр (скорость загрузки опредяется скоростью открытия/закрытия документов)
— оптимально использует одну копию ворда


Хотя имеет смысл посмотреть в сторону других утилит, например, pandoc

Спасибо, дополнил статью этой ссылкой
Вроде у питона есть расширение для работы с docx, которое позволяет пересохранять в другие форматы. К тому же есть python-oletools, который позволяет работать с установленным ms office (и не только) напрямую, без прослойки на vbs) Ну в целом ваше решение норм, очень нестандартное)
.docx можно в plain text (или во множество других форматов, в их числе TeX, HTML и markdown) перегонять с помощью pandoc, правда .doc он не умеет
Sign up to leave a comment.

Articles

Change theme settings