API N'importe quoi vers PDF#

L'endpoint POST /v1/convert/anything-to-pdf convertit presque n'importe quel fichier envoyé — Word, Excel, PowerPoint, OpenDocument, Apple Pages et Numbers, HTML, Markdown, texte brut, EPUB, images et SVG — en PDF. Il détecte automatiquement le format du fichier que vous envoyez, l'achemine vers le bon moteur de rendu et renvoie un seul PDF. Un seul endpoint remplace toute la pile PDF spécifique à chaque format : vous envoyez un fichier, vous récupérez un PDF, quel que soit le type source.

C'est le sur-ensemble en un seul appel des endpoints PDF propres à chaque format (html-to-pdf, doc-to-pdf, excel-to-pdf, et le reste) — utilisez ceux-ci lorsque vous connaissez déjà le type d'entrée et souhaitez un contrôle fin des pages, et utilisez celui-ci lorsque l'entrée peut être n'importe quoi. Cet endpoint fonctionne uniquement à partir de fichiers ; pour rendre une page web en direct en PDF, utilisez url-to-pdf. Pour l'équivalent Markdown qui transforme n'importe quel fichier en Markdown propre, voir anything-to-markdown.


Endpoint#

POST /v1/convert/anything-to-pdf

Content-Type : multipart/form-data

Format de sortie : PDF (.pdf, application/pdf). Le type d'entrée est détecté automatiquement à partir de l'extension du nom de fichier envoyé et de ses magic bytes — vous n'avez pas à spécifier de format d'entrée.


Formats d'entrée pris en charge#

Le type d'entrée est détecté à partir de l'extension du fichier (validée par rapport aux magic bytes du fichier). Voici tous les formats acceptés par l'endpoint :

Catégorie Formats Extensions Remarques
Word DOCX, DOC .docx, .doc Rendu via LibreOffice, en préservant les styles, tableaux et la mise en page.
Excel XLSX, XLS .xlsx, .xls Feuilles de calcul rendues en PDF paginé via LibreOffice.
PowerPoint PPTX, PPT .pptx, .ppt Une page PDF par diapositive, via LibreOffice.
OpenDocument ODT, ODS, ODP, OTS .odt, .ods, .odp, .ots Documents texte, feuille de calcul, présentation et modèle de feuille de calcul, via LibreOffice.
Apple iWork Pages, Numbers .pages, .numbers Documents Apple Pages et Numbers, via LibreOffice.
Texte enrichi / données RTF, CSV .rtf, .csv Documents RTF et tableaux CSV rendus via LibreOffice.
Web / balisage HTML, XHTML .html, .htm, .xhtml Rendu avec WeasyPrint, en respectant le CSS propre au document.
Markdown Markdown .md, .markdown, .mdown, .mkd Rendu en un PDF stylisé avec titres, tableaux et blocs de code délimités.
Texte brut Text .txt, .text Rendu dans une mise en page à chasse fixe qui préserve les espaces.
Livres numériques EPUB .epub Chapitres convertis dans l'ordre de lecture (spine) en un PDF de texte.
Images PNG, JPEG, GIF, BMP, TIFF, WebP, HEIC .png, .jpg, .jpeg, .gif, .bmp, .tiff, .tif, .webp, .heic, .heif Chaque image devient un PDF d'une seule page ; la transparence est aplatie sur du blanc.
Vectoriel SVG .svg Rendu en vectoriel (non rastérisé) avec CairoSVG.
PDF PDF .pdf Accepté et renvoyé tel quel — utile pour la normalisation en niveaux de gris (voir pdf_options).
Remarque : Contrairement aux endpoints PDF spécifiques à chaque format, la géométrie de page (taille de page personnalisée, marges, orientation, en-têtes et pieds de page) n'est pas appliquée ici, car le format d'entrée est détecté automatiquement et chaque type est rendu par un moteur différent. Seul grayscale est pris en compte sur cet endpoint. Pour un contrôle complet de la page, envoyez plutôt du HTML ou du Markdown à html-to-pdf ou markdown-to-pdf. Pour convertir une URL en direct en PDF, utilisez url-to-pdf.

Authentification#

Cet endpoint prend en charge l'authentification par clé privée comme par clé publique.

Clé privée#

Incluez votre clé secrète dans l'en-tête X-API-Key. Utilisez-la pour les appels de serveur à serveur où la clé n'est jamais exposée au client.

X-API-Key: sk_live_your_private_key

Clé publique avec JWT#

Pour une utilisation côté client, générez d'abord un token JWT avec votre clé publique, puis transmettez-le comme token Bearer.

Étape 1 -- Obtenir un token :

POST /v1/auth/token
X-API-Key: pk_live_your_public_key

Étape 2 -- Utiliser le token :

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

Le flux complet, y compris le verrouillage de domaine et le rafraîchissement du token, est décrit dans le guide d'authentification. Chaque clé API porte une liste blanche d'endpoints autorisés — si /v1/convert/anything-to-pdf ne figure pas dans la liste de la clé, la requête est rejetée avec un 403.


Paramètres de la requête#

Envoyez le fichier en multipart/form-data. Le document va dans le champ file ; les autres sont des champs de formulaire optionnels.

Paramètre Type Requis Défaut Description
file file Oui -- Le document, l'image ou le fichier de balisage à convertir. Son extension doit faire partie des formats d'entrée pris en charge ci-dessus.
output_filename string Non Nom d'entrée Nom personnalisé pour le fichier de sortie. L'extension .pdf est ajoutée automatiquement.
direct_download boolean Non true Accepté pour la cohérence de forme de requête avec les autres endpoints de conversion.
job_id string Non -- ID de job fourni par le client pour la récupération en cas de timeout. Lorsqu'une conversion synchrone dépasse les limites de timeout du reverse-proxy, interrogez GET /v1/convert/status/{job_id} pour récupérer le résultat.
pdf_options string Non null Chaîne JSON d'options PDF. Seul grayscale est pris en compte sur cet endpoint — voir ci-dessous.

Options PDF#

À passer sous forme de chaîne JSON dans le champ de formulaire pdf_options. Comme le format d'entrée est détecté automatiquement et que chaque format est rendu par un moteur différent, seul grayscale est appliqué uniformément ici.

Paramètre Type Défaut Description
grayscale boolean false Convertit le PDF de sortie en niveaux de gris via un post-traitement Ghostscript. S'applique à chaque type d'entrée, y compris à un fichier déjà PDF.

Pour une taille de page personnalisée, des marges, une orientation, des en-têtes ou des pieds de page, convertissez du HTML ou du Markdown via les endpoints spécifiques html-to-pdf ou markdown-to-pdf, qui acceptent le schéma pdf_options complet.


Réponse#

La conversion s'exécute en cours de processus et le fichier .pdf résultant est stocké, puis l'endpoint renvoie un corps JSON avec une URL de téléchargement pré-signée :

{
    "presigned_url": "https://spaces.example.com/...signed...",
    "object_key": "env/files/{project_id}/anything-to-pdf/report_20260714_101530123.pdf",
    "filename": "report_20260714_101530123.pdf",
    "file_size": 51240,
    "conversion_time_seconds": 2.1,
    "job_id": null
}

Les mêmes valeurs sont reportées dans les en-têtes de réponse (X-Object-Key, X-File-Size, X-Conversion-Time, X-Filename) afin que vous puissiez les lire sans analyser le corps. Téléchargez le PDF depuis presigned_url — le lien est à durée de vie courte.


Comment chaque format est converti#

Chaque format est normalisé en PDF, vous obtenez donc une sortie cohérente quel que soit le type source.

  • Word / Excel / PowerPoint — Rendu avec LibreOffice en mode headless, en préservant les styles, tableaux et la mise en page ; les présentations produisent une page par diapositive. Les formats binaires hérités (.doc, .xls, .ppt) sont traités par le même moteur.
  • OpenDocument, Apple Pages / Numbers, RTF, CSV — Également rendus via LibreOffice, si bien que les documents ODF, les exports iWork, le texte enrichi et les tableaux CSV se paginent proprement.
  • HTML / XHTML — Rendu avec WeasyPrint, qui respecte le CSS propre au document. Les ressources externes référencées par URL peuvent ne pas être résolues — insérez votre CSS en ligne et encodez les images en base64 pour de meilleurs résultats.
  • Markdown — Converti en HTML (titres, tableaux au format GitHub-Flavored, code délimité) et rendu avec WeasyPrint en un PDF propre et stylisé.
  • Texte brut — Rendu dans une mise en page à chasse fixe qui préserve les espaces et retourne les lignes longues à la ligne, afin que les logs et le code restent lisibles.
  • EPUB — Les documents de contenu sont lus dans l'ordre de la spine (ordre de lecture) et rendus chapitre par chapitre en un PDF de texte ; le document de navigation est ignoré.
  • Images (PNG, JPEG, GIF, BMP, TIFF, WebP, HEIC) — Chaque image devient un PDF d'une seule page via Pillow. La transparence est aplatie sur un fond blanc, et seule la première image d'une image multi-trames (GIF animé, TIFF multi-pages) est utilisée.
  • SVG — Rendu en véritables graphiques vectoriels avec CairoSVG, de sorte que le résultat reste net à n'importe quel niveau de zoom.
  • PDF — Un PDF envoyé est validé et renvoyé inchangé, ce qui fait de cet endpoint un moyen pratique de normaliser un PDF existant en niveaux de gris.

Format de sortie#

Le résultat est un PDF standard (application/pdf) :

  • Les documents conservent leur pagination, leurs titres, leurs tableaux et leur mise en forme issus du moteur de rendu source.
  • Les images produisent une seule page dimensionnée à l'image ; le SVG reste vectoriel.
  • Niveaux de gris — lorsque pdf_options.grayscale vaut true, le PDF finalisé est désaturé via une passe de post-traitement Ghostscript.

Si vous avez besoin de Markdown propre plutôt que d'un PDF — par exemple pour alimenter un LLM ou un pipeline RAG — envoyez le même fichier à anything-to-markdown ou à l'endpoint d'ingestion.


Formats pris en charge par endpoint#

Les endpoints d'envoi de fichiers partagent la même détection automatique de format mais visent des sorties différentes. Cet endpoint (anything-to-pdf) accepte l'ensemble le plus large — les 36 formats ci-dessous. anything-to-markdown et /v2/ingest acceptent les mêmes 22 formats de documents l'un que l'autre (les images, le SVG et les formats Apple/OTS sont réservés au PDF), et /v2/ingest accepte en plus des sources web — une liste d'URL, un sitemap ou un crawl — pas seulement des fichiers.

Catégorie Extensions anything-to-pdf anything-to-markdown /v2/ingest
PDF .pdf
Word .docx, .doc
Excel .xlsx, .xls
PowerPoint .pptx, .ppt
CSV .csv
Texte enrichi .rtf
OpenDocument .odt, .ods, .odp
Modèle ODF .ots
Apple iWork .pages, .numbers
Web / balisage .html, .htm, .xhtml
Markdown / texte .md, .markdown, .mdown, .mkd, .txt, .text
Livres numériques .epub
Images .png, .jpg, .jpeg, .gif, .bmp, .tiff, .tif, .webp, .heic, .heif
Vectoriel .svg

Un ✓ signifie que l'endpoint accepte ce format en tant que fichier envoyé ; un — signifie qu'il ne l'accepte pas. Les images et le SVG se convertissent en PDF ici mais sont rejetés par les endpoints à sortie Markdown (l'OCR d'image est un pipeline distinct). Les limites de taille par fichier dépendent de l'offre (Gratuit : 5 Mo) sur les trois endpoints.


Exemples de code#

curl (clé privée)#

curl -X POST https://api.enconvert.com/v1/convert/anything-to-pdf \
  -H "X-API-Key: sk_live_your_private_key" \
  -F "[email protected]"

Python (clé privée)#

import requests

with open("quarterly-report.docx", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/anything-to-pdf",
        headers={"X-API-Key": "sk_live_your_private_key"},
        files={"file": ("quarterly-report.docx", f)},
    )

response.raise_for_status()
result = response.json()

# Download the PDF from the pre-signed URL.
pdf = requests.get(result["presigned_url"]).content
with open("quarterly-report.pdf", "wb") as out:
    out.write(pdf)

Node.js (clé privée)#

import { readFile, writeFile } from "node:fs/promises";

const form = new FormData();
form.append(
    "file",
    new Blob([await readFile("quarterly-report.docx")]),
    "quarterly-report.docx"
);

const response = await fetch(
    "https://api.enconvert.com/v1/convert/anything-to-pdf",
    { method: "POST", headers: { "X-API-Key": "sk_live_your_private_key" }, body: form }
);

const result = await response.json();
const pdf = await fetch(result.presigned_url).then((r) => r.arrayBuffer());
await writeFile("quarterly-report.pdf", Buffer.from(pdf));

PHP (clé privée)#

$ch = curl_init("https://api.enconvert.com/v1/convert/anything-to-pdf");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_live_your_private_key"],
    CURLOPT_POSTFIELDS => [
        "file" => new CURLFile("quarterly-report.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "quarterly-report.docx"),
    ],
]);

$data = json_decode(curl_exec($ch), true);
curl_close($ch);

echo $data["presigned_url"];

Réponses d'erreur#

Statut Condition
400 Bad Request Type de fichier non pris en charge, fichier vide, ou document corrompu/illisible (par ex. une image invalide ou un EPUB malformé).
400 Bad Request Les octets du fichier ne correspondent pas à son extension déclarée (incohérence de magic bytes).
400 Bad Request JSON pdf_options invalide.
401 Unauthorized Clé API / token JWT manquant ou invalide.
402 Payment Required Limite mensuelle de conversions ou limite de stockage atteinte.
403 Forbidden /v1/convert/anything-to-pdf ne figure pas dans les endpoints autorisés de la clé API.
413 Payload Too Large L'envoi dépasse la limite de taille par fichier de votre offre.
500 Internal Server Error La conversion a échoué de manière inattendue.

La référence complète des codes de statut est dans le guide des codes d'erreur.


Limites#

Limite Valeur
Taille maximale d'envoi Selon l'offre (Gratuit : 5 Mo)
Conversions mensuelles Selon l'offre (Gratuit : 100)
Rétention des fichiers Selon l'offre (Gratuit : 1 heure)
Options de géométrie de page Non appliquées sur cet endpoint (uniquement grayscale)
Formats d'entrée pris en charge Voir le tableau formats d'entrée pris en charge

Foire aux questions#

Comment convertir n'importe quel fichier en PDF avec une API ?#

Envoyez une requête POST à /v1/convert/anything-to-pdf en multipart/form-data avec votre fichier dans le champ file et votre clé dans l'en-tête X-API-Key. L'endpoint détecte automatiquement le format, le rend en PDF et renvoie un JSON contenant une presigned_url vers le .pdf finalisé. Vous n'avez pas besoin de lui indiquer le type d'entrée — l'extension et les magic bytes en décident.

Quels formats de fichiers puis-je convertir en PDF ?#

Word (.docx, .doc), Excel (.xlsx, .xls), PowerPoint (.pptx, .ppt), OpenDocument (.odt, .ods, .odp, .ots), Apple Pages et Numbers, RTF, CSV, HTML/XHTML, Markdown, texte brut, EPUB, images (.png, .jpg, .jpeg, .gif, .bmp, .tiff, .webp, .heic) et SVG. Un PDF existant est accepté et renvoyé tel quel. La liste complète avec les remarques propres à chaque format est dans le tableau formats d'entrée pris en charge.

Puis-je convertir Word, Excel ou PowerPoint en PDF via l'API ?#

Oui. Les documents Office — modernes (.docx, .xlsx, .pptx) et hérités (.doc, .xls, .ppt) — sont rendus avec LibreOffice, en préservant les styles, tableaux et la mise en page, avec une page par diapositive pour les présentations. Envoyez le fichier et vous récupérez le PDF.

Comment convertir une image telle que PNG, JPEG ou HEIC en PDF ?#

Envoyez-la au même endpoint. Chaque image devient un PDF d'une seule page, avec la transparence aplatie sur un fond blanc ; les photos iPhone .heic/.heif et les vecteurs .svg sont également pris en charge. Pour une image multi-trames (GIF animé ou TIFF multi-pages), la première image est utilisée.

Puis-je définir une taille de page, des marges ou des en-têtes personnalisés sur le PDF ?#

Pas sur cet endpoint — seul grayscale est pris en compte, car le format d'entrée est détecté automatiquement et chaque type utilise un moteur de rendu différent. Pour un contrôle complet de la page (taille de page, marges, orientation, en-têtes, pieds de page), envoyez du HTML ou du Markdown aux endpoints html-to-pdf ou markdown-to-pdf, qui acceptent le schéma pdf_options complet.

En quoi est-ce différent des endpoints doc-to-pdf ou html-to-pdf ?#

Les endpoints spécifiques à chaque format acceptent chacun un seul type d'entrée et exposent des options complètes de géométrie de page ; anything-to-pdf les accepte tous derrière un seul appel et détecte automatiquement le format, ce qui est idéal lorsque l'entrée peut être n'importe quoi. Utilisez un endpoint spécifique lorsque vous connaissez le type et souhaitez un contrôle des pages ; utilisez celui-ci lorsque vous voulez un chemin d'envoi unique pour de nombreux formats.