Fichier Html au format PDF en Python sans wkhtmltopdf

0

La question

J'ai un Plotly de plusieurs Pages(onglets) Tiret de l'Application. Je voudrais convertir cette PDF fichier. Je sais qu'il y a dash_snapshot_engine module, ce qui n'est pas gratuit. Donc je suis à la recherche d'une alternative libre. Comme mon Dash application sera un exécutable, je ne peux pas utiliser un logiciel externe tel que wkhtmltopdf, Je ne peux utiliser Python seules les bibliothèques.

Quelqu'un at-il des suggestions sur la façon de convertir un html fichier pdf avec les bibliothèques Python?

Merci à l'avance!

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

La meilleure réponse

0

Vous pouvez ajouter wkhtmltopdf pour votre exe à l'aide de 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)

La construction de la exe (wkhtmltopdf et votre script dans le même répertoire):

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

Out:

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

Merci pour cette idée. Est-il aussi travailler avec cx_freeze? Puis-je ajouter .les fichiers exe de la même façon?
abc

@abc: je n'ai jamais utilisé cx_freeze, juste PyInstaller, nuitka ou py2exe (pour Python 2.x). Peut-être utiles: stackoverflow.com/questions/2553886/...
Maurice Meyer

Est-il possible que wkhtmltopdf utilise les web-service pour convertir le html en pdf? - Dans ce cas, il n'est pas une option, tout comme le convertisseur doit utiliser "hors ligne" méthodes...
abc

pas de wkhtmltpdf ne toutes la transformation sur place de lui-même.
Ryan

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................