Tout ce dont vous avez besoin pour développer sur l'API PDF4me.
Obtenez une clé API, appelez un seul point de terminaison REST pour toute opération sur un document, et expédiez. Convertissez, effectuez une reconnaissance optique de caractères (OCR), fusionnez, générez et codez-y des documents à partir de n'importe quelle langue.
Vivre en trois étapes.
- 1. Prenez votre clé. Créez un compte et générez une clé API dans le tableau de bord.
- 2. Appelez un point de terminaison. Envoyez un document base64 et des options JSON à
https://api.pdf4me.com/api/v2/<Action>. - 3. Récupérez votre fichier. La réponse renvoie le fichier traité ; les tâches longues renvoient une URL d’état à interroger.
curl -X POST https://api.pdf4me.com/api/v2/ConvertToPdf \
-H "Authorization: Basic YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"docContent": "<base64 file>",
"docName": "input.docx"
}'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 }; Copier-coller depuis GitHub.
Chaque point de terminaison est fourni avec un exemple exécutable en Node.js, Python, C# et Java, dans un dépôt unique que vous pouvez cloner dès aujourd'hui. Ajoutez votre clé et exécutez.
pdf4me-api-samples
Exemples exécutables par point de terminaison en Node.js, Python, C# et Java. Clonez le dépôt, renseignez votre clé API et exécutez-le.
Disponible sur GitHubTesteur d'API URL
Essayez n'importe quel point de terminaison depuis le navigateur sans aucune configuration, puis copiez la requête exacte qu'il génère.
Ouvrez le testeurTous les dépôts et outils
Des exemples, des connecteurs et des outils ouverts pour l'ensemble de la plateforme PDF4me sont disponibles sur notre organisation GitHub.
Parcourez l'organisationUne seule API pour toutes les opérations sur les documents.
Ouvrez une catégorie pour voir ses points de terminaison, chacun accompagné d'une description et d'un lien vers la documentation.
Bien plus qu'une clé API.
Tout ce qui entoure les points de terminaison et qui vous permet de passer d'un premier test à la production.
Clés et environnements
Générez, faites pivoter et définissez la portée des clés API par environnement, directement depuis le tableau de bord.
Gérer les clésUtilisation et analyses
Surveillez le volume de vos appels et suivez votre consommation par rapport à votre forfait afin d'éviter toute mauvaise surprise.
Asynchrone par défaut
Les tâches de longue durée renvoient une URL d'état que vous interrogez jusqu'à ce que le fichier traité soit prêt.
N'importe quel langage, sans SDK
HTTPS simple avec en-tête d'authentification de base. Appelable depuis n'importe quel environnement d'exécution ; les bibliothèques officielles sont facultatives.
Connecteurs sans code
Les mêmes actions de document à l'intérieur de Zapier, Make, Power Automate et n8n.
Voir les connecteursDocumentation pour chaque point de terminaison
Modèles de référence, de requête et de réponse, et exemples à copier-coller pour chaque action.
Lisez les documentsPré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.
curl -X POST https://api.pdf4me.com/v1/ConvertToPdfNiveau gratuit · Aucune carte de crédit requise