ConvertHTMLToPDF

 Qubes 6.3 Conversion en PDF d'une page web

Syntaxe

function ConvertHTMLToPDF(url: String; ExtraOption: String; TimeOutInSeconds: Integer): String
url: url de la page à convertir
ExtraOption: options complémentaires de ligne de commande
TimeOutInSeconds: timeout en secondes

Remarques

Dépréciée
Cette fonction utilisait le moteur WebKit, Qt et wkhtmltopdf. Le support de Webkit dans Qt ayant été déprécié par Apple en 2012, cette fonction l'est aussi.
Une alternative basée sur Chromium est disponible dans Qubes 9.0 au travers de TCEFHtmlSnapshot et offre un support des standards Web modernes (introduits depuis 2012).

La fonction fait appel à la page web correspondant à l'url et la convertit en PDF.

Pour éviter d'attendre indéfiniment le résultat d'une conversion, on définit un timeout (en secondes).
Si la conversion n'est pas finie quand le timout est atteint, la fonction renvoie une chaîne vide (pas d'exception).

La conversion est faite via le logiciel wkhtmltopdf, qui doit être correctement installé sur le poste qui exécute la fonction (cf. pré-requis technique ci-dessous). Si wkhtmltopdf n'est pas trouvé, la fonction déclenche une exception.

La page à convertir peut contenir des ressources diverses (images, css, javascript, etc.), dans la limite des capacités du moteur Qt WebKit utilisé par wkhtmltopdf.

wkhtmltopdf propose de nombreux réglages complémentaires (marges, taille de page, orientation, compression, table des matières, etc.), qu'on peut définir en renseignant ses options de ligne de commande dans le paramètre ExtraOption.

Pour obtenir des pages dans le bon format voici les tailles en pixels pour les XForms :

A4 Portrait 96 dpi : 794 x 1123

Une liste complete sur le site suivant https://www.papersizes.org/a-sizes-in-pixels.htm

Il peux aussi parfois etre nécessaire de désactiver le calcul automatique de ratio de webkit avec l'option suivante :

--disable-smart-shrinking

Si la page ou certaines de ses ressources doivent être accédées via un proxy http, il faut ajouter dans ExtraOption :

--proxy ProxyAddress:PortNumber

Si la page est mise en forme par des scripts Javascript un peu longs, on peut demander à la fonction de leur laisser du temps pour s'exécuter avant de faire la conversion en ajoutant dans ExtraOption :

--javascript-delay NbMillisec

Authentification QubesExpress

Pour convertir une page de l'intranet Qubes qui a besoin de connaître l'utilisateur connecté (car elle fait appel à des ressources ou fonctions qui exigent une authentification), il faut transmettre à la fonction le cookie de session QubesExpress de l'utilisateur :

'--cookie QuBESSession "' + QubesExpressCurrentSessionCookie + '"'
  • Pour les versions plus anciennes :
'--cookie QuBESSession "' + ReadContextVar('Request.Cookies.QuBESSession') + '"'

Pré-requis technique

La fonction requiert que wkhtmltopdf soit installée par défaut avec Qubes Server.

Si la version 32 bits est utilisée, il faudra installer aussi la version 32 bits du package Redistribuable Visual C++ pour Visual Studio 2013.

Exemples

uses PDF;

var url:='https://www.google.fr';
var pdfData:=ConvertHTMLToPDF(url, '--orientation Landscape --no-background --grayscale', 10);
if pdfData='' then raise Exception.Create('La conversion a échoué');

// Enregistrement du résultat dans un fichier
var fileName:=GetTemporaryFilesPath+'page.pdf';
SaveStringToFile(fileName, pdfData);

Print('Done: '+fileName);

Classification

PDF