Développement

Quelques notes pour répondre à des problématiques rencontrées au travail.

ParadoxPDF et entités HTML : failed executing command

ParadoxPDF est une extension eZ Publish permettant de générer des fichiers PDF. Son moteur de rendu est écrit en Java et se base sur Flying Saucer. Elle a l’avantage de très bien gérer le CSS 2.1 et reste simple à mettre en place.

Toutefois, le moteur est assez susceptible il n’est pas rare d’obtenir des erreurs de conversion, affichées dans paradoxpdf.log :

[ Jun 06 2014 10:00:49 ] Failed executing command : /usr/bin/java -Djava.awt.headless=true -jar extension/paradoxpdf/bin/paradoxpdf.jar var/someextension/paradoxpdf/62c9cd5801032094008afbabaf7efda7.xhtml var/someextension/paradoxpdf/62c9cd5801032094008afbabaf7efda7.pdf  2>&1 , 
 Output : ERROR:  'Le nom de l'identit? doit imm?diatement suivre le caract?re "&" dans la r?f?rence d'entit?.'

On peut y voir qu’un fichier XHTML est d’abord généré avant d’être converti en PDF. Lorsque le document XHTML contient des esperluettes, ParadoxPDF les interprète comme des entités XHTML mal formées.

Il convient donc :

  • de toujours utiliser l’opérateur de wash dans vos templates pour nettoyer les variables de tout caractère non valide XHTML
  • d’appliquer un nouvel opérateur de template, pour remplacer tous les & solos (ceux qui ne désignent pas d’entités XHTML) par des &

On va commencer par créer une surcharge de paradoxpdf_layout.tpl. Puis, en bas du fichier, modifier la variable $xhtml pour la passer dans ce nouvel opérateur de template, dont le code tient en une ligne :

$xhtml = preg_replace('/&(?!([\w]{2,7}|#[\d]{1,4});)/', '&', $xhtml);

En XHTML, l’esperluette existe en deux formats :

  • & qui correspond à [\w]{2,7}
  • < qui correspond à [\d]{1,4}

L’opérateur de template doit pouvoir remplacer ces deux variantes par &. Voici comment se décompose l’expression régulière :

  • & esperluette
  • ?! qui n’est pas suivi par
  • [\w]{2,7} un mot de 2 à 7 caractères
  • | ou
  • #[\d]{1,4} un nombre de 1 à 4 digits, et qui commence par dièse
  • ; le point-virgule

Publié le 06/06/2014
dans la catégorie Développement.
Dernière mise à jour le 17/11/2014.

Tags : ezpublish paradoxpdf pdf

Commentaires

Poster un commentaire

Votre adresse e-mail ne sera pas affichée sur le site.