Aller au contenu principal

14,000+ trusted customers

Outils PDF

Chaque outil PDF.
En ligne et gratuit.

Convertissez, fusionnez, compressez, divisez, signez et modifiez des PDF directement dans votre navigateur. Sans installation, sans inscription.

Plus de 40 outils compatibles avec tous les appareils.

Fonctionne là où vous avez déjà construit

Utilisez PDF4me directement sur votre lieu de travail.

PDF4me vous rejoint là où vous êtes déjà : votre navigateur, Microsoft Teams, Google Workspace, votre plateforme d'automatisation ou votre propre code.

Pour les développeurs

Conçu pour les développeurs.

Des exemples concrets et exécutables issus directement de nos exemples open source. Choisissez un point de terminaison et un langage.
Copiez le fichier en entier et exécutez-le. Voilà toute l'API.

const fs = require('fs');
const path = require('path');

/**
 * Document to PDF Converter using PDF4Me API
 * Converts various document formats (DOCX, XLSX, etc.) to PDF documents
 * Supports both synchronous and asynchronous processing with retry logic
 */

// API Configuration - PDF4Me service for converting documents to PDF
const API_KEY = "get the API key from https://dev.pdf4me.com/dashboard/#/api-keys/";
const BASE_URL = "https://api.pdf4me.com/";
const API_ENDPOINT = `${BASE_URL}api/v2/ConvertToPdf`;

// File paths configuration
const INPUT_DOC_PATH = "sample.docx";           // Path to input document file
const OUTPUT_PDF_PATH = "Document_to_PDF_output.pdf"; // Output PDF file name

// Retry configuration for async processing
const MAX_RETRIES = 10;
const RETRY_DELAY = 10000; // 10 seconds in milliseconds

/**
 * Main function that orchestrates the document to PDF conversion process
 * Handles file validation, conversion, and result processing
 */
async function convertDocumentToPdf() {
    console.log("Starting Document to PDF Conversion Process...");
    console.log("This converts various document formats (DOCX, XLSX, etc.) to PDF");
    console.log("Supports Word documents, Excel spreadsheets, and other formats");
    console.log("-".repeat(60));

    try {
        // Validate input file exists
        if (!fs.existsSync(INPUT_DOC_PATH)) {
            throw new Error(`Input document file not found: ${INPUT_DOC_PATH}`);
        }

        console.log(`Converting: ${INPUT_DOC_PATH} → ${OUTPUT_PDF_PATH}`);

        // Process the conversion
        const result = await processDocumentToPdfConversion();

        // Handle the result
        await handleConversionResult(result);

    } catch (error) {
        console.error("Conversion failed:", error.message);
        process.exit(1);
    }
}

/**
 * Core conversion logic - handles the API request and response processing
 * Supports both synchronous (200) and asynchronous (202) responses
 */
async function processDocumentToPdfConversion() {
    // Read and encode document file to base64
    console.log("Reading and encoding document file...");
    const docContent = fs.readFileSync(INPUT_DOC_PATH);
    const docBase64 = docContent.toString('base64');
    console.log("Document file successfully encoded to base64");

    // Prepare the conversion payload
    const payload = {
        docContent: docBase64,           // Base64 encoded document content
        docName: "output",               // Name for the output file
        async: true                      // Enable asynchronous processing
    };

    // Set up HTTP headers for authentication and content type
    const headers = {
        "Authorization": `Basic ${API_KEY}`,
        "Content-Type": "application/json"
    };

    console.log("Sending request to PDF4Me API...");

    // Make the initial API request
    const response = await fetch(API_ENDPOINT, {
        method: 'POST',
        headers: headers,
        body: JSON.stringify(payload)
    });

    console.log(`Status code: ${response.status}`);

    // Handle different response scenarios
    if (response.status === 202) {
        // Asynchronous processing - poll for completion
        console.log("Request accepted. PDF4Me is processing asynchronously...");
        
        const locationUrl = response.headers.get('Location');
        if (!locationUrl) {
            throw new Error("No 'Location' header found in the response for polling");
        }

        return await pollForCompletion(locationUrl, headers);

    } else if (response.status === 200) {
        // Synchronous processing - immediate result
        console.log("Document to PDF conversion completed immediately!");
        return await response.arrayBuffer();

    } else {
        // Error response
        const errorText = await response.text();
        throw new Error(`API request failed. Status: ${response.status}, Response: ${errorText}`);
    }
}

/**
 * Handles the conversion result and saves the PDF file
 * Supports both binary PDF data and base64 encoded responses
 */
async function handleConversionResult(result) {
    try {
        // Convert ArrayBuffer to Buffer for file operations
        const buffer = Buffer.from(result);
        
        // Validate that we have a PDF (check for PDF header)
        if (buffer.length > 4 && buffer.toString('ascii', 0, 4) === '%PDF') {
            console.log("Response is a valid PDF file");
            fs.writeFileSync(OUTPUT_PDF_PATH, buffer);
            console.log(`PDF saved successfully to: ${OUTPUT_PDF_PATH}`);
            console.log("Document has been converted to PDF format");
            return;
        }

        // Try to parse as JSON if not a direct PDF
        try {
            const jsonResponse = JSON.parse(buffer.toString());
            console.log("Successfully parsed JSON response");
            
            // Look for PDF data in different possible JSON locations
            let pdfBase64 = null;
            if (jsonResponse.document && jsonResponse.document.docData) {
                pdfBase64 = jsonResponse.document.docData;  // Common location 1
            } else if (jsonResponse.docData) {
                pdfBase64 = jsonResponse.docData;           // Common location 2
            } else if (jsonResponse.data) {
                pdfBase64 = jsonResponse.data;              // Alternative location
            }

            if (pdfBase64) {
                // Decode base64 PDF data and save to file
                const pdfBytes = Buffer.from(pdfBase64, 'base64');
                fs.writeFileSync(OUTPUT_PDF_PATH, pdfBytes);
                console.log(`PDF saved to ${OUTPUT_PDF_PATH}`);
                console.log("Document has been converted to PDF format");
            } else {
                console.log("No PDF data found in the response.");
                console.log("Full response:", JSON.stringify(jsonResponse, null, 2));
            }

        } catch (jsonError) {
            console.log("Failed to parse JSON response, treating as binary data");
            // If JSON parsing fails, try to save as binary anyway
            if (buffer.length > 1000) {
                fs.writeFileSync(OUTPUT_PDF_PATH, buffer);
                console.log(`PDF saved to ${OUTPUT_PDF_PATH} (as binary data)`);
                console.log("Document has been converted to PDF format");
            } else {
                console.log("Warning: Response doesn't appear to be a valid PDF");
                console.log(`First 100 bytes: ${buffer.toString('hex', 0, 100)}`);
            }
        }

    } catch (error) {
        throw new Error(`Error saving PDF: ${error.message}`);
    }
}

/**
 * Polls the API for async completion with retry logic
 * Handles 202 (processing) and 200 (completed) status codes
 */
async function pollForCompletion(locationUrl, headers) {
    console.log(`Polling URL: ${locationUrl}`);

    for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
        console.log(`Waiting for result... (Attempt ${attempt}/${MAX_RETRIES})`);
        
        // Wait before polling (except on first attempt)
        if (attempt > 1) {
            await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
        }

        try {
            const response = await fetch(locationUrl, {
                method: 'GET',
                headers: headers
            });

            if (response.status === 200) {
                // Conversion completed successfully
                console.log("Document to PDF conversion completed successfully!");
                return await response.arrayBuffer();

            } else if (response.status === 202) {
                // Still processing, continue polling
                console.log("Still processing...");
                continue;

            } else {
                // Error occurred during processing
                const errorText = await response.text();
                throw new Error(`Unexpected error during polling: ${response.status}, Response: ${errorText}`);
            }

        } catch (error) {
            if (attempt === MAX_RETRIES) {
                throw new Error(`Polling failed after ${MAX_RETRIES} attempts: ${error.message}`);
            }
            console.log(`Polling attempt ${attempt} failed: ${error.message}`);
        }
    }

    throw new Error(`Timeout: Document to PDF conversion did not complete after ${MAX_RETRIES} retries`);
}

// Main execution - Run the conversion when script is executed directly
if (require.main === module) {
    convertDocumentToPdf().catch(error => {
        console.error("Fatal error:", error.message);
        process.exit(1);
    });
}

module.exports = { convertDocumentToPdf, processDocumentToPdfConversion, handleConversionResult }; 
  • 100points de terminaison de l'API
  • 15Catégories d'API
  • 4Plateformes sans code
  • 30+outils en ligne gratuits
  • 4Extensions
Pour les développeurs

En un seul clic
à un million d'appels API.

extraction de données par IA

Transformer les factures et les formulaires en données propres.

Utilisez le code PDF4me pour pointer vers une facture, un reçu, un relevé bancaire ou un contrat et obtenir un JSON structuré, prêt à être intégré à vos systèmes. Aucun modèle n'est à gérer pour ces types de documents.

  • Analyseurs syntaxiques prêts à l'emploi pour factures, reçus, relevés bancaires, bulletins de salaire, contrats et plus encore
  • Les champs tels que le fournisseur, les articles, les totaux, les dates et les taxes sont renvoyés au format JSON.
  • Actions natives dans Power Automate, Make et n8n, ainsi que le même moteur sur l'API REST
Explorer l'extraction de données par IA
génération de documents

Générer des documents à partir de modèles et de données.

Fusionnez les modèles Word ou HTML avec votre JSON pour produire des fichiers PDF ou Word, un à la fois ou en masse.

  • Modèles Word (.docx) et HTML avec variables, tableaux et images
  • Génération unique ou en masse à partir d'enregistrements de données JSON
  • Les mêmes actions de génération sur l'API REST, Power Automate, Make, n8n et Zapier
Explorez la génération de documents.
Facturation électronique

Expédiez les factures électroniques ZUGFeRD en un seul appel.

Générez des factures électroniques hybrides ZUGFeRD, un fichier PDF/A-3 avec le XML de la facture intégré, prêt pour le mandat B2B allemand et tout ERP EN 16931.

  • Hybride PDF/A-3 + XML, aligné sur EN 16931 et Factur-X
  • Conformité BASIC, COMFORT et EXTENDED, à partir de données XML, JSON ou CSV
  • Actions natives dans Power Automate, Make, n8n et Zapier, ainsi que l'API REST
Explorez la facturation ZUGFeRD
Analyser et classer

Concevoir un analyseur syntaxique pour n'importe quel document.

Définissez votre propre schéma de champs et extrayez exactement ce dont vous avez besoin, ou laissez PDF4me classer automatiquement les lots mixtes et acheminer chaque document selon son type.

  • Analysez selon votre propre schéma JSON ou classez automatiquement par type de document.
  • Modèles d'analyseurs personnalisés, intégrés au tableau de bord développeur
  • Scores de confiance pour l'acheminement de lots de documents mixtes
Explorer, analyser et classer
Automatisation Word et Excel

Automatisez Word et Excel à grande échelle.

Convertissez les fichiers Word et Excel en PDF et inversement, puis fusionnez, divisez, ajoutez un filigrane et protégez par mot de passe les fichiers Office, le tout à partir d'une seule API sans installation d'Office requise.

  • Word devient PDF, Excel devient PDF, et PDF revient à Word ou Excel
  • Fusionner, diviser et comparer des fichiers Word ; ajouter, mettre à jour et extraire des lignes Excel
  • Filigraner et protéger par mot de passe les fichiers Word et Excel
Explorez Word et Excel
codes-barres

Lire, créer et segmenter par code-barres.

Générez et intégrez des codes QR, Code 128, Data Matrix et plus de 50 autres types de codes-barres, relisez-les à partir de fichiers PDF et d'images, ou divisez des lots de documents à l'aide de séparateurs de codes-barres.

  • Créez et intégrez plus de 50 types de codes-barres, y compris QR et Data Matrix.
  • Lire les codes-barres et les codes Swiss QR à partir de fichiers PDF et d'images
  • Factures Swiss QR et EPC/SEPA, plus PDF fractionné par code-barres
Explorer les codes-barres
Confiance et sécurité

Vos documents sont en sécurité.

La confidentialité et la sécurité sont intégrées dès la conception, et non ajoutées a posteriori. PDF4me, société suisse, applique les mêmes règles de traitement des données, que vous convertissiez un seul fichier dans le navigateur ou que vous en traitiez des millions via l'API.

Fichiers supprimés après traitement

Les fichiers téléchargés sont chiffrés au repos sur un espace de stockage cloud isolé, puis supprimés automatiquement sous une heure via les outils en ligne, ou quelques minutes après l'exécution d'une tâche API. Les liens de partage expirent au bout de 14 jours. Nous conservons uniquement les documents que vous enregistrez explicitement dans Mes documents.

Jamais utilisé pour entraîner l'IA

Le contenu de vos documents n'est jamais conservé pour l'entraînement de nos modèles, ni pour ceux de tiers. L'extraction par IA s'effectue uniquement selon le schéma que vous définissez lors de votre demande. Nous n'exploitons, n'analysons ni ne revendons les fichiers que vous nous envoyez.

Accord de traitement des données

Besoin d'un accord de protection des données (DPA) pour vos achats ou votre conformité au RGPD ? Téléchargez le modèle d'accord PDF4me ainsi que ses annexes relatives au traitement des données et à la sécurité. Partagez-les avec votre service juridique sans attendre la conclusion d'une vente.

Chiffré de bout en bout

Chaque chargement de fichier, appel d'API et téléchargement s'effectue via HTTPS/TLS. Pendant le traitement d'un fichier, celui-ci reste chiffré au repos, isolé au niveau du locataire et conservé en mémoire uniquement le temps de l'exécution.

Certification ISO 27001 en coursIn progress

Nous mettons en œuvre un système de gestion de la sécurité de l'information formel conforme à la norme ISO/IEC 27001 : politiques documentées, accès basé sur les rôles, contrôle des changements, réponse aux incidents et supervision des fournisseurs, avec un audit indépendant prévu pour 2026.

Conçu pour la production

Une plateforme unique pour les outils PDF du quotidien et une API REST de production avec SDK, connecteurs d'automatisation (Make, Zapier, Power Automate, n8n) et MCP. Intégrez des fonctionnalités documentaires à votre produit sans avoir à développer une infrastructure PDF en interne.

Outils PDF

Tous les outils PDF, à portée de clic.

Convertissez, modifiez, fusionnez, compressez, signez et effectuez une reconnaissance optique de caractères (OCR), gratuitement dans votre navigateur. Sans installation ni inscription.

Parcourez tous les outils 33 Chaque outil présenté ici est également une API.
Tarification

Ne payez que pour ce que vous traitez.

Commencez gratuitement avec l'API, puis rechargez avec des forfaits prépayés sans date d'expiration. Paiement unique, sans engagement, et chaque forfait s'ajoute à votre abonnement mensuel.

Pour l'essayer
$25une seule fois

Appels API 500

Environ $0.050 par appel. Les crédits n'expirent jamais.

  • Paiement unique
  • Empilables sur n'importe quel plan
  • 1 appel par document
Obtenez le pack 500
Pour les petits projets
$45une seule fois

Appels API 1,000

Environ $0.045 par appel. Les crédits n'expirent jamais.

  • Paiement unique
  • Empilables sur n'importe quel plan
  • 1 appel par document
Obtenez le pack 1,000
Pour l'automatisation légère
$95une seule fois

Appels API 2,500

Environ $0.038 par appel. Les crédits n'expirent jamais.

  • Paiement unique
  • Empilables sur n'importe quel plan
  • 1 appel par document
Obtenez le pack 2,500
Pour les équipes de mise à l'échelle
$330une seule fois

Appels API 10,000

Environ $0.033 par appel. Les crédits n'expirent jamais.

  • Paiement unique
  • Empilables sur n'importe quel plan
  • 1 appel par document
Obtenez le pack 10,000
Pour les volumes élevés
$650une seule fois

Appels API 25,000

Environ $0.026 par appel. Les crédits n'expirent jamais.

  • Paiement unique
  • Empilables sur n'importe quel plan
  • 1 appel par document
Obtenez le pack 25,000
Pour les volumes élevés
CoutumeContactez le service commercial

Plus de 25 000 appels API

Besoin de plus que notre forfait prépayé le plus important ? Contactez notre service commercial pour obtenir des tarifs dégressifs personnalisés, des conditions de facturation adaptées et une assistance dédiée.

  • Remises sur volume disponibles
  • Assistance dédiée au compte
  • Conditions de facturation flexibles
Parlez au service commercial

Un appel API par document. Les conversions de haute qualité, la reconnaissance optique de caractères (OCR) et les fonctionnalités d'intelligence artificielle sont comptabilisées comme un appel par page. Vous souhaitez souscrire un abonnement mensuel ou utiliser la version gratuite ? Consultez la page des tarifs pour plus d'informations.

Consultez la tarification complète et les coûts des appels API

Préparez vos documents.

Intégrez-le à votre produit grâce à l'API, automatisez-le sans coder ou utilisez les outils gratuits directement dans votre navigateur. Aucune carte de crédit n'est requise pour commencer.

Commencez par un seul appelcurl -X POST https://api.pdf4me.com/v1/ConvertToPdf

Niveau gratuit · Aucune carte de crédit requise