Pular para o conteúdo principal

14,000+ trusted customers

Ferramentas PDF

Todas as ferramentas PDF.
Online e gratuito.

Converta, mescle, comprima, divida, assine e edite PDFs diretamente no seu navegador. Sem instalação, sem cadastro.

Mais de 40 ferramentas que funcionam em qualquer dispositivo.

Funciona onde você já construiu.

Use PDF4me exatamente onde você trabalha.

PDF4me encontra você onde você já está: no seu navegador, no Microsoft Teams, no Google Workspace, na sua plataforma de automação ou no seu próprio código.

Para desenvolvedores

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 }; 
  • 100endpoints da API
  • 15Categorias de API
  • 4Plataformas sem código
  • 30+Ferramentas online gratuitas
  • 4Extensões
Para desenvolvedores

Com um único clique
para um milhão de chamadas de API.

extração de dados por IA

Converta faturas e formulários em dados limpos.

Aponte PDF4me para uma fatura, recibo, extrato bancário ou contrato e receba como resposta um JSON estruturado, pronto para ser inserido em seus sistemas. Sem necessidade de manter modelos para esses tipos de documento.

  • Analisadores prontos para uso em faturas, recibos, extratos bancários, contracheques, contratos e muito mais.
  • Campos como fornecedor, itens de linha, totais, datas e impostos, retornados em formato JSON.
  • Ações nativas em Power Automate, Make e n8n, além do mesmo mecanismo na API REST.
Explore a extração de dados por IA
Geração de documentos

Gere documentos a partir de modelos e dados.

Combine modelos Word ou HTML com seu JSON para gerar arquivos PDF ou Word, individualmente ou em lote.

  • Modelos Word (.docx) e HTML com variáveis, tabelas e imagens.
  • Geração individual ou em lote a partir de registros de dados JSON
  • As mesmas ações de geração na API REST, Power Automate, Make, n8n e Zapier
Explore a geração de documentos
Faturação eletrônica

Envie faturas eletrônicas ZUGFeRD em uma única chamada.

Gere faturas eletrônicas híbridas ZUGFeRD, um arquivo PDF/A-3 com o XML da fatura incorporado, pronto para atender à legislação B2B da Alemanha e a qualquer sistema ERP compatível com a norma EN 16931.

  • Híbrido PDF/A-3 + XML, alinhado com EN 16931 e Factur-X
  • Conformidade BÁSICA, CONFORTO e ESTENDIDA, a partir de dados XML ou JSON ou CSV.
  • Ações nativas em Power Automate, Make, n8n e Zapier, além da API REST.
Explore a faturação ZUGFeRD
Analisar e classificar

Crie um analisador sintático para qualquer documento.

Defina seu próprio esquema de campos e extraia exatamente o que você precisa, ou deixe o PDF4me classificar lotes mistos automaticamente e encaminhar cada documento por seu tipo.

  • Analise de acordo com seu próprio esquema JSON ou classifique automaticamente por tipo de documento.
  • Modelos de analisadores personalizados, integrados ao painel do desenvolvedor.
  • Pontuações de confiança para encaminhar lotes mistos de documentos
Explorar, analisar e classificar
Automação Word e Excel

Automatize Word e Excel em grande escala.

Converta arquivos Word e Excel para PDF e vice-versa, e depois mescle, divida, adicione marcas d'água e proteja arquivos do Office com senha, tudo a partir de uma única API, sem necessidade de instalar o Office.

  • Word para PDF, Excel para PDF e PDF de volta para Word ou Excel.
  • Mesclar, dividir e comparar arquivos Word; adicionar, atualizar e extrair linhas Excel.
  • Adicione marca d'água e proteja com senha os arquivos Word e Excel.
Explore Word e Excel
Códigos de barras

Ler, criar e dividir por código de barras.

Gere e incorpore códigos QR, Code 128, Data Matrix e mais de 50 outros tipos de códigos de barras, leia-os de PDFs e imagens ou divida lotes de documentos com base em separadores de código de barras.

  • Crie e incorpore mais de 50 tipos de códigos de barras, incluindo QR e Data Matrix.
  • Leia códigos de barras e códigos Swiss QR de PDFs e imagens.
  • Faturas Swiss QR e EPC/SEPA, além de PDF dividido por código de barras.
Explore códigos de barras
Confiança e segurança

Seus documentos estão em boas mãos.

Privacidade e segurança são integradas, não adicionadas posteriormente. A PDF4me, de propriedade suíça, aplica as mesmas regras de tratamento de dados, independentemente de você converter um único arquivo no navegador ou processar milhões por meio da API.

Arquivos excluídos após o processamento.

Os uploads são criptografados em repouso em armazenamento isolado na nuvem e, em seguida, removidos automaticamente em até uma hora em ferramentas online ou em poucos minutos após a conclusão de uma tarefa da API. Os links de compartilhamento expiram após 14 dias. Mantemos apenas o que você salva explicitamente em Meus Documentos.

Nunca foi usado para treinar IA.

O conteúdo dos seus documentos nunca é retido para treinamento de modelos, sejam nossos ou de terceiros. A extração por IA é executada apenas no esquema que você define no momento da solicitação. Não mineramos, analisamos ou revendemos os arquivos que você nos envia.

Acordo de Processamento de Dados

Precisa de um DPA para análises de compras ou de conformidade com o RGPD? Baixe o contrato PDF4me, além dos anexos de processamento e segurança. Compartilhe-os com o departamento jurídico sem precisar esperar por uma conversa de vendas.

Criptografado de ponta a ponta

Cada upload do navegador, chamada de API e download trafega por HTTPS/TLS. Enquanto um arquivo está sendo processado, ele permanece criptografado em repouso, isolado do locatário e mantido na memória apenas durante a execução da tarefa.

ISO 27001 em andamentoIn progress

Estamos implementando um sistema formal de gestão de segurança da informação ISO/IEC 27001: políticas documentadas, acesso baseado em funções, controle de mudanças, resposta a incidentes e supervisão de fornecedores, com uma auditoria independente prevista para 2026.

Construído para produção

Uma plataforma para ferramentas PDF do dia a dia e uma API REST de produção com SDKs, conectores de automação (Make, Zapier, Power Automate, n8n) e MCP. Inclua recursos de documentos em seu produto sem precisar desenvolver uma infraestrutura PDF internamente.

Ferramentas PDF

Todas as ferramentas PDF, a um clique de distância.

Converta, edite, mescle, comprima, assine e faça OCR, tudo gratuitamente no seu navegador. Sem instalação, sem cadastro.

Veja todas as ferramentas 33 Todas as ferramentas aqui também são APIs.
Preços

Pague apenas pelo que processar.

Comece gratuitamente com a API e depois recarregue com pacotes pré-pagos que nunca expiram. Pagamento único, sem fidelização, e todos os pacotes são cumulativos em um plano mensal.

Para experimentar
$25uma vez

Chamadas de API 500

Aproximadamente $0.050 por chamada. Os créditos nunca expiram.

  • Pagamento único
  • Acumula em qualquer plano
  • 1 chamada por documento
Adquira o pacote 500
Para projetos pequenos
$45uma vez

Chamadas de API 1,000

Aproximadamente $0.045 por chamada. Os créditos nunca expiram.

  • Pagamento único
  • Acumula em qualquer plano
  • 1 chamada por documento
Adquira o pacote 1,000
Para automação leve
$95uma vez

Chamadas de API 2,500

Aproximadamente $0.038 por chamada. Os créditos nunca expiram.

  • Pagamento único
  • Acumula em qualquer plano
  • 1 chamada por documento
Adquira o pacote 2,500
Para equipes em expansão
$330uma vez

Chamadas de API 10,000

Aproximadamente $0.033 por chamada. Os créditos nunca expiram.

  • Pagamento único
  • Acumula em qualquer plano
  • 1 chamada por documento
Adquira o pacote 10,000
Para grandes volumes
$650uma vez

Chamadas de API 25,000

Aproximadamente $0.026 por chamada. Os créditos nunca expiram.

  • Pagamento único
  • Acumula em qualquer plano
  • 1 chamada por documento
Adquira o pacote 25,000
Para grandes volumes
Personalizadocontatar o departamento de vendas

Mais de 25.000 chamadas de API

Precisa de mais do que o nosso maior pacote pré-pago? Entre em contato com o departamento de vendas para obter preços personalizados por volume, condições de faturamento e suporte dedicado.

  • Descontos por volume disponíveis
  • Suporte dedicado à conta
  • Condições de faturamento flexíveis
Fale com o departamento de vendas.

Uma chamada de API por documento. Conversões de alta qualidade, OCR e recursos de IA contam como uma chamada por página. Precisa de um plano mensal ou da versão gratuita? Todas as informações estão na página de preços completa.

Veja os preços completos e os custos das chamadas de API.

Conclua 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.

Comece com uma única chamadacurl -X POST https://api.pdf4me.com/v1/ConvertToPdf

Nível gratuito · Não é necessário cartão de crédito