Impressions, sorties PDF

Bonjour,

Mon aventure avec dokos continue, et je suis tombé sur quelques problèmes:

J’ai configuré des modèles d’impression devis / commandes / livraison et facture basés sur le modèle standard.
J’ai ajouté une image et un peu de HTML comme entêtes.

Lorsque j’affiche une facture via le bouton imprimer, tout fonctionne correctement.
Par contre, lorsque je tente d’appuyer sur le bouton PDF, cela génère la facture, sans image, et probablement sans CSS vu les que l’ensemble des alignements sautent.

J’utilise le module wkhtmltox 0.12.6 sur mon serveur.
Est-ce que je dois faire quelque chose de particulier pour que la sortie PDF ressemble à celle d’une impression à l’écran ?

Merci.

Bonjour @ozy,

Il faut bien utiliser la version “with patched qt”

Est-ce que le problème ne viendrait pas de SELinux ?

Bonjour,

J’avoue que j’avais fait quelques recherches avant de poster.

  • Version de wkhtmltopdf: wkhtmltopdf 0.12.6 (with patched qt)
  • SELinux dĂ©sactivĂ© pour le test
  • Firewalld dĂ©sactivĂ© pour le test
  • Nom d’hĂ´te du site joignable depuis le serveur
  • Config docli correcte via docli --site [nomdusite] set-config hostname ["nom d'hote"]

Je continue de chercher.

Trouvé…
J’ai tenté en ligne de commande wkhtmltopdf http://url-dokos test.pdf et j’ai eu le plaisir de trouver un fichier test.pdf contenant le site par défaut de nginx plutôt que celui dokos.
Après vérification des logs nginx, effectivement la génération de PDF à partir de dokos tentait le chargement des fichiers assets depuis le site par défaut plutôt que celui de dokos.

Quelques recherches plus tard, j’ai remarqué que curl http://mon_url_dokos renvoyait vers le site par défaut. Toujours en recherchant, j’ai trouvé que:
curl -4 http://mon_url_dokos renvoie bien vers le site dokos
curl -6 http://mon_url_dokos renvoie vers lie site par défaut de nginx

IPv6 est utilisé par défaut lorsque cela est possible. Donc deux solutions:

  • Reconfigurer /etc/hosts pour supprimer l’entrĂ©e IPv6 qui resoud le domaine dokos
  • Ajouter la directive listen [::]:80; dans le fichier de configuration nginx de dokos, pour obliger nginx a accepter les requĂŞtes IPv6 sur le site dokos.

Etant donné que IPv6 devrait être configuré partout, je ferais une PR pour l’activer par défaut :wink:

Merci, et désolé pour le bruit sur le forum.

1 « J'aime »

Je rajoute quelques détails sur l’erreur si quelqu’un tombe dessus.

La configuration ci-dessus fonctionne correctement pour un site dokos classique.

Dès lors qu’il est derrière un proxy HTTPS (haproxy dans mon cas), les impressions wkhtmltopdf échoueront à cause du CORS (mixed content HTTP & HTTPS).
Je m’en suis rendu compte en ajoutant un “print(html)” dégeulasse au fichier apps/frappe/frappe/utils/pdf.py le temps d’un diagnostic.

Le message d’origine IOError: wkhtmltopdf exited with non-zero code 1. error: n’étant pas exactement le plus utile.

Il faudra renseigner la valeur hostname dans sites/nom_site/site_config.json comme étant l’url complète, type https://mon.site.dokos.tld

1 « J'aime »