API Apple Numbers vers PDF#

L'API Apple Numbers vers PDF convertit les feuilles de calcul Apple iWork Numbers (.numbers) en PDF via l'endpoint POST /v1/convert/numbers-to-pdf. Envoyez un fichier .numbers en multipart/form-data et recevez les octets bruts du PDF en retour, ou définissez direct_download=false pour obtenir des métadonnées JSON avec une URL de téléchargement présignée. Le rendu est assuré côté serveur par LibreOffice : la mise en forme, les polices et la mise en page propres à la feuille de calcul sont préservées dans le PDF de sortie.


Endpoint#

POST /v1/convert/numbers-to-pdf

Content-Type : multipart/form-data

Entrée acceptée : fichiers .numbers

Format de sortie : .pdf (application/pdf)


Authentification#

Nécessite soit une clé API privée, soit un token JWT issu d'une clé publique.

X-API-Key: sk_your_private_key

Ou :

Authorization: Bearer <jwt_token>

Paramètres de requête#

Paramètre Type Requis Défaut Description
file file Oui -- Le fichier .numbers à convertir.
output_filename string Non Nom du fichier d'entrée Nom de fichier de sortie personnalisé. L'extension .pdf est ajoutée automatiquement.
direct_download boolean Non true Si true, renvoie les octets bruts du PDF. Si false, renvoie des métadonnées JSON avec une URL de téléchargement présignée.
pdf_options string Non null Chaîne JSON. Seule l'option grayscale est prise en charge sur cet endpoint (voir ci-dessous).

Options PDF#

Pour les convertisseurs de documents basés sur LibreOffice, la mise en page (taille, marges, orientation) est déterminée par les réglages du document lui-même. Le seul champ pdf_options pris en compte est :

Paramètre Type Défaut Description
grayscale boolean false Convertit le PDF de sortie en niveaux de gris via un post-traitement Ghostscript.
Note : La taille de page, les marges, l'orientation, l'échelle, les en-têtes et les pieds de page de pdf_options ne s'appliquent pas à cet endpoint. Le PDF de sortie conserve la mise en forme définie dans le document d'origine. Pour modifier la mise en page, modifiez le document source avant de l'envoyer.

Détails de la conversion#

  • Utilise LibreOffice (via unoserver) pour le rendu des documents côté serveur
  • La mise en forme, les polices, la mise en page et les médias intégrés du document sont préservés
  • Timeout de conversion : 120 secondes
  • La sortie reproduit fidèlement le document tel qu'il apparaîtrait à l'impression depuis LibreOffice

Réponse#

Téléchargement direct (direct_download=true, par défaut)#

HTTP 200 OK
Content-Type: application/pdf
Content-Disposition: inline; filename="document_20260405_123456789.pdf"

Renvoie les octets bruts du PDF.

Réponse avec métadonnées (direct_download=false)#

{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/numbers-to-pdf/document_20260405_123456789.pdf",
    "filename": "document_20260405_123456789.pdf",
    "file_size": 67890,
    "conversion_time_seconds": 3.5
}

Exemples de code#

Python#

import requests

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

with open("output.pdf", "wb") as out:
    out.write(response.content)

Node.js#

const form = new FormData();
form.append("file", fs.createReadStream("document.numbers"));

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

fs.writeFileSync("output.pdf", Buffer.from(await response.arrayBuffer()));

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/numbers-to-pdf");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("document.numbers")]
]);
$pdf = curl_exec($ch);
curl_close($ch);
file_put_contents("output.pdf", $pdf);

Go#

body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "document.numbers")
file, _ := os.Open("document.numbers")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/numbers-to-pdf", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)

Avec sortie en niveaux de gris#

import requests
import json

with open("document.numbers", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/numbers-to-pdf",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("document.numbers", f)},
        data={"pdf_options": json.dumps({"grayscale": True})}
    )

Réponses d'erreur#

Statut Condition
400 Bad Request Le fichier n'est pas un fichier .numbers
400 Bad Request Échec de la conversion du document (fichier corrompu ou non pris en charge)
400 Bad Request JSON pdf_options invalide
401 Unauthorized Clé API ou token JWT manquant ou invalide
402 Payment Required Quota mensuel d'ops épuisé
402 Payment Required Limite de stockage atteinte
413 Payload Too Large Le fichier dépasse la taille maximale autorisée par le plan
500 Internal Server Error La conversion a expiré (limite de 120 secondes)

Limites#

Limite Valeur
Taille maximale de fichier Selon le plan (Founding : 5 MB)
Timeout de conversion 120 secondes
Conversions mensuelles Selon le plan

Questions fréquentes#

Comment convertir une feuille de calcul Apple Numbers en PDF avec une API REST ?#

Envoyez une requête POST à /v1/convert/numbers-to-pdf avec le fichier .numbers dans un corps multipart/form-data, authentifiée avec un header X-API-Key ou un JWT Authorization: Bearer. La réponse contient par défaut les octets du PDF converti.

Puis-je recevoir une URL de téléchargement au lieu des octets bruts du PDF ?#

Oui. Définissez direct_download=false et l'API renvoie des métadonnées JSON comprenant presigned_url, le filename de sortie, file_size et conversion_time_seconds.

Puis-je contrôler la taille de page, les marges ou l'orientation lors de la conversion Numbers vers PDF ?#

Non. La mise en page provient des réglages du document Numbers lui-même ; le seul champ pdf_options pris en charge est grayscale. Pour modifier la mise en page, modifiez le document source avant de l'envoyer.

Pourquoi l'endpoint numbers-to-pdf renvoie-t-il 400 Bad Request ?#

Un 400 Bad Request est renvoyé lorsque le fichier envoyé n'est pas un .numbers, lorsque le document est corrompu ou non pris en charge, ou lorsque la valeur de pdf_options n'est pas du JSON valide.

Quelles sont les limites de taille de fichier et de timeout pour la conversion Numbers vers PDF ?#

La taille maximale de fichier dépend du plan (5 MB sur le plan Founding) et chaque conversion est soumise à un timeout de 120 secondes ; une conversion expirée renvoie 500 Internal Server Error.