Tudo o que você precisa para desenvolver com a API PDF4me.
Obtenha uma chave de API, chame um endpoint REST para qualquer operação com documentos e pronto. Converta, realize OCR, mescle, gere e crie códigos de barras para documentos em qualquer idioma.
Viva em três etapas.
- 1. Pegue sua chave. Crie uma conta e gere uma chave de API no painel de controle.
- 2. Chame um endpoint. Envie um documento base64 e opções JSON para
https://api.pdf4me.com/api/v2/<Action>. - 3. Pegue seu arquivo. A resposta retorna o arquivo processado; tarefas longas retornam uma URL de status para consulta.
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"
}'Projetado para desenvolvedores.
Exemplos reais e executáveis diretamente de nossos exemplos de código aberto. Escolha um endpoint e uma linguagem.
Copie o arquivo inteiro e execute-o. Essa é toda a 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 }; Copiar e colar do GitHub.
Cada endpoint é fornecido com um exemplo executável em Node.js, Python, C# e Java, em um único repositório que você pode clonar hoje mesmo. Adicione sua chave e execute.
pdf4me-api-samples
Exemplos executáveis para cada endpoint em Node.js, Python, C# e Java. Clone o repositório, insira sua chave de API e execute.
Abrir no GitHubTestador de API de URL
Experimente qualquer endpoint a partir do navegador sem nenhuma configuração e, em seguida, copie a solicitação exata que ele gera.
Abra o testadorTodos os repositórios e ferramentas
Exemplos, conectores e ferramentas abertas para toda a plataforma PDF4me estão disponíveis em nossa organização no GitHub.
Navegue pela organização.Uma API para todas as operações com documentos.
Abra uma categoria para ver seus endpoints, cada um com uma descrição e um link para a documentação.
Mais do que uma chave de API.
Tudo o que envolve os endpoints e permite que você passe do primeiro teste à produção.
Chaves e ambientes
Gere, rotacione e defina o escopo das chaves de API por ambiente, diretamente do painel de controle.
Gerenciar chavesUtilização e análises
Monitore o volume de suas chamadas e acompanhe o uso em relação ao seu plano para evitar surpresas em grande escala.
Assíncrono por padrão
Tarefas de longa duração retornam uma URL de status que você consulta até que o arquivo processado esteja pronto.
Qualquer idioma, sem SDK
HTTPS simples com cabeçalho de autenticação básica. Pode ser chamado de qualquer ambiente de execução; as bibliotecas oficiais são opcionais.
Conectores sem código
As mesmas ações de documento ocorrem dentro de Zapier, Make, Power Automate e n8n.
Veja conectoresDocumentação para cada endpoint
Referências, formatos de solicitação e resposta, e exemplos de copiar e colar para cada ação.
Leia a documentaçãoConclua seus documentos.
Integre-o ao seu produto com a API, automatize-o sem código ou use as ferramentas gratuitas no seu navegador. Não é necessário cartão de crédito para começar.
curl -X POST https://api.pdf4me.com/v1/ConvertToPdfNível gratuito · Não é necessário cartão de crédito