Html - файл в PDF на Python без wkhtmltopdf

0

Вопрос

У меня есть сюжетно многостраничное(вкладки) Тире-приложение. Я хотел бы преобразовать это в PDF файл. Я знаю, что есть dash_snapshot_engine модуль, который не является бесплатным. Поэтому я ищу бесплатную альтернативу. Поскольку мое приложение Dash будет исполняемым, я не могу использовать внешнее программное обеспечение, такое как wkhtmltopdf, Я могу использовать только библиотеки Python.

Есть ли у кого-нибудь какие-либо предложения о том, как преобразовать html файл в pdf с библиотеками Python?

Заранее спасибо!

html pdf plotly-dash python
2021-11-22 09:53:01
1

Лучший ответ

0

Вы могли бы добавить wkhtmltopdf к вашему exe с помощью PyInstaller:

import subprocess
import sys

htmlPath = 'C:/temp/test.html'
pdfPath = 'C:/temp/test_through_exe.pdf'

if getattr(sys, 'frozen', False):
    # Change wkhtmltopdf path for exe!
    wkPath = os.path.join(sys._MEIPASS, "wkhtmltopdf.exe")
else:
    wkPath = 'C:/.../Downloads/wkhtmltopdf.exe'

with open(htmlPath, 'w') as f:
    f.write('<html><body><h1>%s</h1></body></html>' % sys.version)

cmd = '%s %s %s' % (wkPath, htmlPath, pdfPath)
print(cmd)

proc = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
stdout, stderr = proc.communicate()

print(proc.returncode, stdout)
print(proc.returncode, stderr)

Строительство exe (wkhtmltopdf и ваш скрипт в одном каталоге):

PyInstaller --onefile --add-data ./wkhtmltopdf.exe;. test.py

Из:

C:\Users\xxx\AppData\Local\Temp\_MEI33842\wkhtmltopdf.exe C:/temp/test.html C:/temp/test_through_exe.pdf
0 b''
0 b'Loading pages (1/6)\r\n[>                                                           ] 0%\r[======>
     ] 10%\r[==============================>                             ] 50%\r[============================================================] 100%\rCounting pages (2/6)                                               \r\n[============================================================] Object 1 of 1\rResolving links (4/6)                                                       \r\n[============================================================] Object 1 of 1\rLoading headers and footers (5/6)                                           \r\nPrinting pages (6/6)\r\n[>
                     ] Preparing\r[============================================================] Page 1 of 1\rDone
                                  \r\n'

enter image description here

2021-11-22 11:18:13

Спасибо вам за эту идею. Работает ли он также с cx_freeze? Могу ли я добавить файлы .exe таким же образом?
abc

@abc: Я никогда не использовал cx_freeze, просто PyInstaller, nuitka или py2exe (для Python 2.x). Может быть полезно: stackoverflow.com/questions/2553886/...
Maurice Meyer

Возможно ли, что wkhtmltopdf использует веб-сервис для преобразования html в pdf? - В данном случае это не вариант, так как конвертер должен использовать "автономные" методы...
abc

НЕТ wkhtmltpdf выполняет всю обработку локально самостоятельно.
Ryan

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................