Convertir du HTML en PDF avec l'API PDFMonkey

Dernière mise à jour le 7 avril 2026

PDFMonkey peut fonctionner comme une API HTML vers PDF. Envoyez votre HTML complet — <head>, styles et <body> inclus — sous forme de chaîne dans le payload du document, et PDFMonkey le convertit en PDF tel quel. Aucun travail de templating côté PDFMonkey n’est nécessaire.

C’est utile lorsque le HTML vit déjà dans votre propre pipeline : un moteur d’e-mails transactionnels réutilisé pour des reçus, un export depuis un dashboard, ou un template de facture HTML existant.

Quand utiliser cette approche

N’adoptez ce schéma que lorsque le HTML est produit et maintenu en dehors de PDFMonkey. Si la mise en page du document sera toujours générée par PDFMonkey, un Modèle Code classique avec des données dynamiques et de la logique Liquid vous servira bien mieux.

Comment PDFMonkey convertit votre HTML en PDF

PDFMonkey n’expose pas de point d’entrée HTML brut. Chaque PDF est généré à partir d’un Template. La solution consiste en un Modèle Code minimaliste qui sert de relais transparent :

  1. Le template contient une seule balise de sortie Liquid : {{htmlContent}}
  2. Vous envoyez votre HTML complet comme valeur de htmlContent dans le payload du document
  3. Liquid rend la balise sans l’échapper, donc votre HTML est injecté verbatim
  4. Le moteur PDF convertit la page résultante en PDF

Étape 1 — Créer le template relais

Créez un nouveau Modèle Code (cela ne fonctionne pas avec les Modèles Builder — voir plus bas). Dans l’onglet HTML, n’écrivez rien de plus que :

{{htmlContent}}

Ouvrez les Paramètres et configurez le format de page, les marges et la version du moteur souhaités. Ces réglages s’appliquent au niveau du template, quel que soit le HTML que vous envoyez.

Cliquez sur Publier pour rendre le template disponible via l’API.

Envoyez un document HTML complet

Le template ne rend que ce qui se trouve dans htmlContent. Votre HTML doit tout inclure : une déclaration <!DOCTYPE html>, un <head> avec vos balises <style> ou <link>, et un <body>. PDFMonkey n’ajoute rien autour.

Étape 2 — Envoyer votre HTML dans le payload du document

Envoyez votre HTML comme champ de type chaîne htmlContent à l’intérieur de l’objet payload :

curl https://api.pdfmonkey.io/api/v1/documents \
  -X POST \
  -H 'Authorization: Bearer YOUR_SECRET_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "document": {
      "document_template_id": "YOUR-TEMPLATE-ID",
      "status": "pending",
      "payload": {
        "htmlContent": "<!DOCTYPE html><html><head><style>p { color: #333 }</style></head><body><p>Hello\nWorld!</p></body></html>"
      }
    }
  }'

La plupart des bibliothèques HTTP (Node.js fetch, Python requests, Ruby net/http) sérialisent les chaînes automatiquement — vous passez le HTML comme une chaîne normale et la bibliothèque gère l’échappement. Si vous construisez le JSON à la main, échappez :

  • les guillemets doubles → \"
  • les retours à la ligne → \n
  • les antislashs → \\

Voir Générer des PDFs avec l’API pour le flux de génération complet, y compris la récupération de l’URL de téléchargement.

Combiner votre HTML avec du Liquid

Le template passe toujours par Liquid, donc vous pouvez superposer de la logique PDFMonkey sur votre HTML. Par exemple, ce template ajoute un filigrane sans toucher à votre HTML :

{{htmlContent}}

{% if watermark %}
  <div class="watermark">{{watermark}}</div>
{% endif %}

Envoyez htmlContent et watermark dans le payload. La balise {% raw %} est disponible si un champ de votre payload contient des caractères {{ littéraux qui ne doivent pas être évalués.

Assets, polices et encodage

Quelques points à vérifier pour que votre HTML s’affiche correctement.

Les images et feuilles de style externes doivent utiliser des URL absolues. Le moteur PDF n’a aucune notion de votre système de fichiers ou de votre serveur. Un chemin relatif comme ./img/logo.png ou /assets/style.css ne sera pas résolu et l’asset sera ignoré silencieusement. Utilisez des URL complètes en https:// à la place.

Les polices externes se chargent normalement si elles sont accessibles. Un <link> vers Google Fonts ou un CDN public fonctionne comme prévu — le moteur les récupère lors du rendu. Les polices hébergées derrière une authentification ou sur localhost ne se chargeront pas.

Déclarez votre encodage de caractères. Incluez toujours <meta charset="utf-8"> dans le <head>. Sans cela, les caractères non-ASCII (lettres accentuées, CJK, symboles) peuvent s’afficher sous forme de caractères corrompus selon la version du moteur.

Compromis et limites

CompromisDétails
Pas de layout réutilisableLes en-têtes, pieds de page et styles partagés doivent vivre dans votre propre pipeline HTML
Payloads plus volumineuxChaque document transporte la chaîne HTML complète ; les gros payloads comptent dans les limites de stockage
Pas d’aperçu en directL’onglet Données de test peut contenir un exemple, mais les changements ne se prévisualisent pas comme avec un template classique
Pas de logique Liquid intégréeConditions, boucles et filtres doivent être dans votre moteur, pas dans PDFMonkey

Si vous avez besoin de ces fonctionnalités, basculez sur un Modèle Code et laissez PDFMonkey gérer le rendu.

Les Modèles Builder ne supportent pas ce schéma

Les Modèles Builder rendent leurs bindings via Vue, qui échappe le HTML par défaut dans les expressions {{ ... }}. Du HTML brut envoyé via un binding Builder s’affiche comme du texte visible.

Pour injecter du HTML déjà construit dans un Modèle Builder, déposez un bloc HTML sur le canvas et collez votre balisage directement dans son éditeur de code. Les blocs HTML sont statiques — ils font partie du template, pas du payload.

Pages liées

Questions fréquentes

Puis-je utiliser PDFMonkey comme API HTML vers PDF ?
Oui. Créez un Modèle Code contenant uniquement {{htmlContent}}, puis envoyez votre HTML complet comme valeur de htmlContent dans le payload du document. Le moteur Liquid de PDFMonkey n'échappe pas le HTML, donc le balisage est rendu tel quel et le fichier généré est retourné.
Comment envoyer du HTML déjà construit à PDFMonkey pour obtenir un PDF ?
1. Créez un Modèle Code avec une seule ligne : {{htmlContent}}. 2. Publiez le template. 3. Envoyez une requête POST à /api/v1/documents avec votre HTML comme chaîne dans le champ htmlContent du payload. PDFMonkey génère le PDF et retourne le document avec une URL de téléchargement.
Cette approche HTML vers PDF fonctionne-t-elle avec un Modèle Builder ?
Non. Les Modèles Builder utilisent Vue, qui échappe le contenu interpolé par défaut. Le HTML brut envoyé via un binding Builder s'affiche comme du texte visible, pas comme du balisage rendu. Utilisez plutôt un Modèle Code, ou déposez un bloc HTML sur le canvas du Builder.
Pourquoi faut-il quand même un template si j'envoie tout le HTML moi-même ?
PDFMonkey génère toujours les documents à partir d'un template. Ce dernier porte le format de page, les marges, la version du moteur et les contrôles d'accès — même lorsqu'il ne contient qu'un placeholder Liquid pour votre HTML.
Quel échappement est nécessaire pour envoyer du HTML dans un payload JSON ?
Les guillemets doubles doivent être échappés en \", les retours à la ligne en \n et les antislashs en \\. La plupart des bibliothèques HTTP et des sérialiseurs JSON gèrent cela automatiquement — l'échappement manuel n'est nécessaire que lorsque vous construisez des chaînes JSON brutes à la main.