2014-01-02 4 views
19

Я пытался найти эффективный способ преобразования документа, например. doc, docx, ppt, pptx to pdf. До сих пор я пробовал docsplit и oowriter, но оба заняли> 10 секунд, чтобы завершить работу на pptx file с размером 1.7MB. Может ли кто-нибудь предложить мне лучший способ или предложения улучшить мой подход?Эффективный способ преобразования документа в формат PDF

Что я пробовал:

from subprocess import Popen, PIPE 
import time 

def convert(src, dst): 
    d = {'src': src, 'dst': dst} 
    commands = [ 
     '/usr/bin/docsplit pdf --output %(dst)s %(src)s' % d, 
     'oowriter --headless -convert-to pdf:writer_pdf_Export %(dst)s %(src)s' % d, 
    ] 

    for i in range(len(commands)): 
     command = commands[i] 
     st = time.time() 
     process = Popen(command, stdout=PIPE, stderr=PIPE, shell=True) # I am aware of consequences of using `shell=True` 
     out, err = process.communicate() 
     errcode = process.returncode 
     if errcode != 0: 
      raise Exception(err) 
     en = time.time() - st 
     print 'Command %s: Completed in %s seconds' % (str(i+1), str(round(en, 2))) 

if __name__ == '__main__': 
    src = '/path/to/source/file/' 
    dst = '/path/to/destination/folder/' 
    convert(src, dst) 

Выход:

Command 1: Completed in 11.91 seconds 
Command 2: Completed in 11.55 seconds 

Окружающая среда:

  • Linux - Ubuntu 12,04
  • Python 2.7.3

Дополнительные инструменты результат:

+1

Обратите внимание, что это не настоящий бенчмарк. Единственный результат не имеет смысла. Результаты должны быть рассчитаны как среднее из многих испытаний, а также должно быть представлено как минимум стандартное отклонение. – BartoszKP

+0

@BartoszKP Спасибо за разъяснение. Я выбрал неправильное слово. –

+1

Ну, так как вы заинтересованы в эффективности, «эталон» - это правильное слово для использования, потому что это инструмент для измерения эффективности.Так что ваш код неправильный, а не слова :) – BartoszKP

ответ

17

Попробуйте позвонить unoconv из кода Python, потребовалось 8 секунд на моей локальной машине, я не знаю, если это достаточно быстро для вы:

time unoconv 15.\ Text-Files.pptx 
real 0m8.604s 
+1

Python Uno - это самый надежный способ получить достойный pdf-выход из различных типов документов MS Office. Он использует (Star | Libre | Open) офисную бэкэнд для преобразования документа. В принципе вы можете сделать больше, чем просто конвертировать документы. Вы можете включить ** основные ** подпрограммы. Я все равно буду использовать Uno очень осторожно. Офисные программы, как известно, являются ящиками памяти. Посмотрите через https://wiki.openoffice.org/wiki/PyUNO_bridge – djinn

+0

Спасибо за ваш ответ, я попробую и дам вам знать :) –

+0

Еще хотите его быстрее: P, но я думаю, что это лучшее время. Спасибо –

2

к сожалению, у меня нет времени, чтобы сделать полный тест, но вы можете проверить xtopdf, мой Python инструментарий для создания PDF. Он не выполняет полный диапазон конверсий, и некоторые из конверсий имеют ограничения, но это может быть полезно. xtopdf ссылка:

Интернет презентация о xtopdf - хороший обзор того, что это такое, что он делает, платформы, особенность, пользователи, использует и т.д .: http://slid.es/vasudevram/xtopdf

xtopdf на Bitbucket: https://bitbucket.org/vasudevram/xtopdf

Многих блог сообщения, показывающие, как использовать xtopdf для различных целей, в том числе многих, которые показывают, как использовать его для преобразования различных форматов ввода в PDF: http://jugad2.blogspot.com/search/label/xtopdf

HTH, Vasudev Ram

+0

Преобразование DOCX на xtopdf появляется, чтобы извлечь только текст и форматировать полосы. Не удивительно полезно. – fatuhoku

+0

@fatuhoku: Да, это так. И это то, что «некоторые из конверсий имеют ограничения», - подразумевает - как это должно быть несколько очевидно, если вы прочитали мой комментарий. Я полагаюсь на библиотеки для большинства преобразований входного формата, поэтому, если у них есть ограничения, в этом случае также xtopdf. Непосредственная. Кроме того, не все должно быть «удивительно полезным». Просто «полезно» достаточно хорошо для очень многих случаев использования - наряду с некоторой настройкой с помощью пользовательского кода или вручную, даже. Бывает все время в реальной жизни. –

+0

Эй @ Васудев не собирался подавать свой проект. Это правда, что я не прочитал весь ваш ответ. Слишком поздно, чтобы отредактировать мой комментарий. С именем типа 'xtopdf', говорящим, что он« не выполняет весь спектр преобразований », на самом деле является преуменьшением, что вызвало мой комментарий для потомков. – fatuhoku

3

Pandoc - прекрасный инструмент, способный быстро делать то, что вам нужно. Поскольку вы используете Popen для эффективной оболочки команды для инструмента, не имеет значения, на каком языке этот инструмент написан (Pandoc написан в Haskell).

+0

Спасибо за ваш ответ, я попробую и дам вам знать :) –

0

Для дока и DOCX (но не п.п./PPTX), вы можете попробовать наш независимый (но коммерческий) высокую точность рендеринг онлайн на OnlineDemo/docx_to_pdf

Под «высокой точностью», я имею в виду он разработан с нуля до тех пор, пока те же разрывы строк и абзацев, табуляции и т. д. и т. д., как Microsoft Word.

Смежные вопросы