Passa al contenuto principale

14,000+ trusted customers

Strumenti PDF

Ogni strumento PDF.
Online e gratuito.

Converti, unisci, comprimi, dividi, firma e modifica i PDF direttamente nel tuo browser. Nessuna installazione, nessuna registrazione.

Oltre 40 strumenti compatibili con qualsiasi dispositivo.

Funziona dove già costruisci

Utilizza PDF4me direttamente sul tuo posto di lavoro.

PDF4me ti raggiunge dove già ti trovi: nel tuo browser, in Microsoft Teams, Google Workspace, nella tua piattaforma di automazione o nel tuo codice.

Per gli sviluppatori

Progettato per gli sviluppatori.

Esempi reali e funzionanti direttamente dai nostri esempi open-source. Scegli un endpoint e un linguaggio,
Copia l'intero file ed eseguilo. Questa è l'intera 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 }; 
  • 100Endpoint API
  • 15categorie API
  • 4Piattaforme senza codice
  • 30+Strumenti online gratuiti
  • 4Estensioni
Per gli sviluppatori

Con un solo clic
a un milione di chiamate API.

Estrazione di dati tramite intelligenza artificiale

Trasforma fatture e moduli in dati puliti.

Punta PDF4me su una fattura, una ricevuta, un estratto conto bancario o un contratto e ricevi in risposta un file JSON strutturato, pronto per essere inserito nei tuoi sistemi. Non è necessario gestire modelli per questi tipi di documenti.

  • Analizzatori sintattici preconfigurati per fatture, ricevute, estratti conto bancari, buste paga, contratti e altro ancora.
  • Campi come fornitore, voci, totali, date e imposte, restituiti in formato JSON
  • Azioni native in Power Automate, Make e n8n, oltre allo stesso motore sull'API REST.
Esplora l'estrazione di dati tramite intelligenza artificiale
Generazione di documenti

Genera documenti a partire da modelli e dati.

Unisci i modelli Word o HTML con il tuo JSON per produrre file PDF o Word, singolarmente o in blocco.

  • Word (.docx) e modelli HTML con variabili, tabelle e immagini
  • Generazione singola o in blocco da record di dati JSON
  • Le stesse azioni di generazione sull'API REST, Power Automate, Make, n8n e Zapier
Esplora la generazione di documenti
Fatturazione elettronica

Invia le fatture elettroniche ZUGFeRD con una sola chiamata.

Genera fatture elettroniche ibride ZUGFeRD, un unico file PDF/A-3 con l'XML della fattura incorporato, pronto per la normativa B2B tedesca e per qualsiasi sistema ERP EN 16931.

  • Ibrido PDF/A-3 + XML, EN 16931 e allineato a Factur-X
  • Conformità BASIC, COMFORT ed EXTENDED, da dati XML, JSON o CSV
  • Azioni native in Power Automate, Make, n8n e Zapier, oltre all'API REST.
Scopri la fatturazione ZUGFeRD
Analizza e classifica

Crea un parser per qualsiasi documento.

Definisci il tuo schema di campi ed estrai esattamente ciò di cui hai bisogno, oppure lascia che PDF4me classifichi automaticamente i lotti misti e instradi ogni documento in base al suo tipo.

  • Analizza il contenuto e convertilo nel tuo schema JSON personalizzato, oppure classifica automaticamente il documento in base al tipo.
  • Modelli di analizzatore personalizzati, integrati nella dashboard per sviluppatori.
  • Punteggi di affidabilità per l'instradamento di lotti di documenti misti
Esplora, analizza e classifica
Automazione Word e Excel

Automatizza Word e Excel su larga scala.

Converti i file Word e Excel in PDF e viceversa, quindi unisci, dividi, aggiungi filigrane e proteggi con password i file di Office, tutto tramite un'unica API e senza bisogno di installare Office.

  • Da Word a PDF, da Excel a PDF e da PDF di nuovo a Word o Excel
  • Unisci, dividi e confronta i file Word; aggiungi, aggiorna ed estrai righe dai file Excel.
  • Aggiungi filigrana e proteggi con password i file Word e Excel
Esplora Word e Excel
codici a barre

Leggi, crea e dividi in base al codice a barre.

Genera e incorpora codici QR, Code 128, Data Matrix e oltre 50 tipi di codici a barre, leggili da PDF e immagini oppure dividi i lotti di documenti utilizzando separatori di codici a barre.

  • Crea e incorpora oltre 50 tipi di codici a barre, inclusi QR e Data Matrix
  • Leggere codici a barre e codici Swiss QR da PDF e immagini
  • Swiss QR e fatture EPC/SEPA, più PDF suddiviso per codice a barre
Esplora i codici a barre
Fiducia e sicurezza

I vostri documenti sono in mani sicure.

Privacy e sicurezza sono integrate nel sistema, non aggiunte in un secondo momento. PDF4me, di proprietà svizzera, applica le stesse regole di gestione dei dati sia che si converta un singolo file nel browser, sia che se ne elaborino milioni tramite API.

File eliminati dopo l'elaborazione

I file caricati vengono crittografati a riposo su un archivio cloud isolato, quindi eliminati automaticamente entro un'ora dagli strumenti online o entro pochi minuti dal completamento di un'operazione API. I link di condivisione scadono dopo 14 giorni. Conserviamo solo i file che salvi esplicitamente in "Documenti".

Non ho mai addestrato l'IA

Il contenuto dei tuoi documenti non viene mai conservato per l'addestramento dei modelli, né nostri né di terzi. L'estrazione tramite intelligenza artificiale si basa esclusivamente sullo schema da te definito al momento della richiesta. Non estraiamo, analizziamo o rivendiamo i file che ci invii.

Accordo sul trattamento dei dati

Hai bisogno di un DPA per gli acquisti o per le revisioni GDPR? Scarica l'accordo PDF4me e gli allegati relativi al trattamento dei dati e alla sicurezza. Condividili con il team legale senza dover attendere una comunicazione commerciale.

Crittografia end-to-end

Ogni caricamento tramite browser, chiamata API e download avviene tramite HTTPS/TLS. Mentre un file è in attesa di elaborazione, rimane crittografato a riposo, isolato a livello di tenant e conservato in memoria solo per la durata dell'operazione.

Implementazione della norma ISO 27001In progress

Stiamo implementando un sistema formale di gestione della sicurezza delle informazioni conforme alla norma ISO/IEC 27001: politiche documentate, accesso basato sui ruoli, controllo delle modifiche, risposta agli incidenti e supervisione dei fornitori, con un audit indipendente previsto per il 2026.

Progettato per la produzione

Un'unica piattaforma per gli strumenti PDF di uso quotidiano e un'API REST di produzione con SDK, connettori di automazione (Make, Zapier, Power Automate, n8n) e MCP. Integra le funzionalità relative ai documenti nel tuo prodotto senza dover sviluppare internamente uno stack PDF.

Strumenti PDF

Tutti gli strumenti PDF, a portata di clic.

Converti, modifica, unisci, comprimi, firma e riconosci tramite OCR, tutto gratis nel tuo browser. Nessuna installazione, nessuna registrazione.

Visualizza tutti gli strumenti 33 Ogni strumento qui presente è anche un'API.
Prezzi

Paghi solo per ciò che elabori.

Inizia gratuitamente con l'API, poi ricarica con pacchetti prepagati che non scadono mai. Pagamento unico, nessun vincolo e ogni pacchetto è cumulabile con l'abbonamento mensile.

Per provarlo
$25Una volta

Chiamate API 500

Circa $0.050 per chiamata. I crediti non scadono mai.

  • pagamento una tantum
  • Si accumula su qualsiasi piano
  • 1 chiamata per documento
Ottieni il pacchetto 500
Per piccoli progetti
$45Una volta

Chiamate API 1,000

Circa $0.045 per chiamata. I crediti non scadono mai.

  • pagamento una tantum
  • Si accumula su qualsiasi piano
  • 1 chiamata per documento
Ottieni il pacchetto 1,000
Per l'automazione leggera
$95Una volta

Chiamate API 2,500

Circa $0.038 per chiamata. I crediti non scadono mai.

  • pagamento una tantum
  • Si accumula su qualsiasi piano
  • 1 chiamata per documento
Ottieni il pacchetto 2,500
Per i team in fase di espansione
$330Una volta

Chiamate API 10,000

Circa $0.033 per chiamata. I crediti non scadono mai.

  • pagamento una tantum
  • Si accumula su qualsiasi piano
  • 1 chiamata per documento
Ottieni il pacchetto 10,000
Per volumi elevati
$650Una volta

Chiamate API 25,000

Circa $0.026 per chiamata. I crediti non scadono mai.

  • pagamento una tantum
  • Si accumula su qualsiasi piano
  • 1 chiamata per documento
Ottieni il pacchetto 25,000
Per volumi elevati
Costumecontattare le vendite

Oltre 25.000 chiamate API

Hai bisogno di più del nostro pacchetto prepagato più grande? Contatta il nostro ufficio vendite per prezzi personalizzati in base al volume, termini di fatturazione e assistenza dedicata.

  • Sono disponibili sconti per acquisti in grandi quantità.
  • Assistenza clienti dedicata
  • Condizioni di fatturazione flessibili
Rivolgersi al reparto vendite

Una chiamata API per documento. Le conversioni di alta qualità, l'OCR e le funzionalità di intelligenza artificiale contano come una chiamata per pagina. Preferisci un piano mensile o il piano gratuito? Trovi tutte le informazioni nella pagina completa dei prezzi.

Consulta i prezzi completi e i costi delle chiamate API.

Sbrigate le vostre pratiche burocratiche.

Integralo nel tuo prodotto tramite API, automatizzalo senza scrivere codice oppure utilizza gli strumenti gratuiti disponibili nel tuo browser. Non è richiesta alcuna carta di credito per iniziare.

Inizia con una singola chiamatacurl -X POST https://api.pdf4me.com/v1/ConvertToPdf

Livello gratuito · Non è richiesta la carta di credito