Saltar al contenido principal

14,000+ trusted customers

Herramientas PDF

Todas las herramientas PDF.
En línea y gratis.

Convierte, combina, comprime, divide, firma y edita archivos PDF directamente en tu navegador. Sin instalación ni registro.

Más de 40 herramientas que funcionan en cualquier dispositivo.

Funciona donde ya has construido

Utilice PDF4me justo donde trabaja.

PDF4me se adapta a ti donde ya te encuentras: tu navegador, Microsoft Teams, Google Workspace, tu plataforma de automatización o tu propio código.

Para desarrolladores

Diseñado para desarrolladores.

Ejemplos reales y ejecutables directamente de nuestros ejemplos de código abierto. Elija un punto final y un lenguaje,
Copia el archivo completo y ejecútalo. Esa es toda la 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 }; 
  • 100puntos finales de la API
  • 15Categorías de API
  • 4Plataformas sin código
  • 30+Herramientas gratuitas en línea
  • 4Extensiones
Para desarrolladores

Con un solo clic
a un millón de llamadas a la API.

Extracción de datos de IA

Convierte facturas y formularios en datos limpios.

Apunta PDF4me a una factura, recibo, extracto bancario o contrato y obtén JSON estructurado, listo para integrar en tus sistemas. No necesitas mantener plantillas para estos tipos de documentos.

  • Analizadores listos para usar para facturas, recibos, extractos bancarios, nóminas, contratos y más.
  • Campos como proveedor, artículos, totales, fechas e impuestos, devueltos como JSON.
  • Acciones nativas en Power Automate, Make y n8n, además del mismo motor en la API REST.
Explorar la extracción de datos de IA
Generación de documentos

Generar documentos a partir de plantillas y datos.

Combine plantillas Word o HTML con su JSON para producir archivos PDF o Word, uno por uno o en lote.

  • Plantillas Word (.docx) y HTML con variables, tablas e imágenes.
  • Generación individual o masiva a partir de registros de datos JSON
  • Las mismas acciones de generación en la API REST, Power Automate, Make, n8n y Zapier
Explorar la generación de documentos
Facturación electrónica

Envíe facturas electrónicas ZUGFeRD en una sola llamada.

Genere facturas electrónicas híbridas ZUGFeRD, un único archivo PDF/A-3 con el XML de la factura integrado, listo para cumplir con la normativa B2B de Alemania y cualquier sistema ERP EN 16931.

  • Híbrido PDF/A-3 + XML, alineado con EN 16931 y Factur-X.
  • Conformidad BÁSICA, COMFORT y EXTENDIDA, a partir de datos XML, JSON o CSV.
  • Acciones nativas en Power Automate, Make, n8n y Zapier, además de la API REST.
Explorar la facturación ZUGFeRD
Analizar y clasificar

Crea un analizador sintáctico para cualquier documento.

Defina su propio esquema de campos y extraiga exactamente lo que necesita, o deje que PDF4me clasifique automáticamente los lotes mixtos y dirija cada documento según su tipo.

  • Analice el código según su propio esquema JSON o clasifíquelo automáticamente por tipo de documento.
  • Plantillas de análisis personalizadas, integradas en el panel de control del desarrollador.
  • Puntuaciones de confianza para enrutar lotes de documentos mixtos
Explora, analiza y clasifica
Automatización Word y Excel

Automatice Word y Excel a gran escala.

Convierta archivos Word y Excel a PDF y viceversa, y luego combine, divida, añada marcas de agua y proteja con contraseña archivos de Office, todo desde una única API sin necesidad de instalar Office.

  • Word a PDF, Excel a PDF y PDF de vuelta a Word o Excel.
  • Combinar, dividir y comparar archivos Word; agregar, actualizar y extraer filas Excel.
  • Marca de agua y protección con contraseña para los archivos Word y Excel.
Explora Word y Excel
Códigos de barras

Leer, crear y dividir por código de barras.

Genere e incruste códigos QR, Code 128, Data Matrix y más de 50 tipos de códigos de barras, léalos desde archivos PDF e imágenes, o divida lotes de documentos por separadores de códigos de barras.

  • Crea e inserta más de 50 tipos de códigos de barras, incluidos QR y Data Matrix.
  • Lee códigos de barras y códigos Swiss QR de archivos PDF e imágenes.
  • Facturas Swiss QR y EPC/SEPA, además de PDF dividido por código de barras
Explorar códigos de barras
Confianza y seguridad

Sus documentos están en buenas manos.

La privacidad y la seguridad están integradas de forma nativa, no añadidas posteriormente. PDF4me, de propiedad suiza, aplica las mismas normas de gestión de datos tanto si se convierte un solo archivo en el navegador como si se procesan millones a través de la API.

Archivos eliminados después del procesamiento

Los archivos subidos se cifran en reposo en un almacenamiento en la nube aislado y se eliminan automáticamente en el plazo de una hora en las herramientas en línea, o en cuestión de minutos una vez que finaliza una tarea de la API. Los enlaces para compartir caducan a los 14 días. Solo conservamos lo que usted guarda explícitamente en Mis documentos.

Nunca se ha utilizado para entrenar IA

El contenido de sus documentos nunca se utiliza para el entrenamiento de modelos, ni el nuestro ni el de terceros. La extracción mediante IA se realiza únicamente con el esquema que usted define al momento de la solicitud. No extraemos, analizamos ni revendemos los archivos que nos envía.

Acuerdo de procesamiento de datos

¿Necesitas un acuerdo de protección de datos (DPA) para compras o revisiones del RGPD? Descarga el acuerdo PDF4me y sus anexos de procesamiento y seguridad. Compártelos con tu equipo legal sin esperar a que se abra un hilo de ventas.

Cifrado de extremo a extremo

Cada carga de navegador, llamada a la API y descarga se realiza mediante HTTPS/TLS. Mientras un archivo se retiene para su procesamiento, permanece cifrado en reposo, aislado del usuario y se mantiene en memoria solo durante la duración de la tarea.

La norma ISO 27001 está en marcha.In progress

Estamos implementando un sistema formal de gestión de seguridad de la información ISO/IEC 27001: políticas documentadas, acceso basado en roles, control de cambios, respuesta a incidentes y supervisión de proveedores, con una auditoría independiente prevista para 2026.

Diseñado para la producción

Una plataforma para herramientas PDF de uso diario y una API REST de producción con SDK, conectores de automatización (Make, Zapier, Power Automate, n8n) y MCP. Integre funcionalidades de documentos en su producto sin necesidad de desarrollar una pila PDF internamente.

Herramientas PDF

Todas las herramientas de PDF, a un solo clic.

Convierte, edita, combina, comprime, firma y realiza OCR, gratis en tu navegador. Sin instalación ni registro.

Explora todas las herramientas 33 Cada herramienta aquí es también una API.
Precios

Pague solo por lo que procese.

Comienza gratis con la API y luego recarga con paquetes prepago que nunca caducan. Pago único, sin permanencia, y todos los paquetes se acumulan en un plan mensual.

Para probarlo
$25una sola vez

Llamadas a la API 500

Aproximadamente $0.050 por llamada. Los créditos nunca caducan.

  • Pago único
  • Pilas en cualquier plan
  • 1 llamada por documento
Obtén el paquete 500
Para proyectos pequeños
$45una sola vez

Llamadas a la API 1,000

Aproximadamente $0.045 por llamada. Los créditos nunca caducan.

  • Pago único
  • Pilas en cualquier plan
  • 1 llamada por documento
Obtén el paquete 1,000
Para automatización ligera
$95una sola vez

Llamadas a la API 2,500

Aproximadamente $0.038 por llamada. Los créditos nunca caducan.

  • Pago único
  • Pilas en cualquier plan
  • 1 llamada por documento
Obtén el paquete 2,500
Para equipos en crecimiento
$330una sola vez

Llamadas a la API 10,000

Aproximadamente $0.033 por llamada. Los créditos nunca caducan.

  • Pago único
  • Pilas en cualquier plan
  • 1 llamada por documento
Obtén el paquete 10,000
Para alto volumen
$650una sola vez

Llamadas a la API 25,000

Aproximadamente $0.026 por llamada. Los créditos nunca caducan.

  • Pago único
  • Pilas en cualquier plan
  • 1 llamada por documento
Obtén el paquete 25,000
Para alto volumen
CostumbreContactar con ventas

Más de 25.000 llamadas a la API

¿Necesitas más que nuestro paquete prepago más grande? Ponte en contacto con nuestro departamento de ventas para obtener precios personalizados por volumen, condiciones de facturación y asistencia especializada.

  • Descuentos por volumen disponibles
  • Soporte técnico especializado para cuentas
  • Condiciones de facturación flexibles
Habla con ventas

Una llamada a la API por documento. Las conversiones de alta calidad, el OCR y las funciones de IA cuentan como una llamada por página. ¿Necesitas un plan mensual o la versión gratuita? Encontrarás toda la información en la página de precios.

Consulte la lista completa de precios y los costos de las llamadas a la API.

Prepara tus documentos.

Intégralo en tu producto con la API, automatízalo sin código o usa las herramientas gratuitas en tu navegador. No necesitas tarjeta de crédito para empezar.

Empieza con una sola llamada.curl -X POST https://api.pdf4me.com/v1/ConvertToPdf

Nivel gratuito · No se requiere tarjeta de crédito