500 API çağrıları
Çağrı başına yaklaşık $0.050. Kredilerin süresi asla dolmaz.
- Tek seferlik ödeme
- Herhangi bir plana göre yığınlar
- Belge başına 1 çağrı
14,000+ trusted customers
Hali hazırda inşa ettiğiniz yerlerde çalışır.
PDF4me, zaten bulunduğunuz yerde sizinle buluşur: tarayıcınızda, Microsoft Teams'da, Google Workspace'da, otomasyon platformunuzda veya kendi kodunuzda.
Açık kaynak kodlu örneklerimizden doğrudan alınmış, çalıştırılabilir gerçek örnekler. Bir uç nokta ve bir dil seçin,
Dosyanın tamamını kopyalayın ve çalıştırın. API'nin tamamı bu kadar.
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 }; PDF4me komutunu bir fatura, makbuz, banka ekstresi veya sözleşmeye yönlendirin ve sistemlerinize kolayca entegre edebileceğiniz yapılandırılmış JSON verisi alın. Bu belge türleri için şablon bakımı yapmanıza gerek yok.

Word veya HTML şablonlarını JSON verilerinizle birleştirerek, tek tek veya toplu olarak PDF veya Word dosyaları oluşturabilirsiniz.

ZUGFeRD hibrit e-faturalarını oluşturun; fatura XML'inin gömülü olduğu tek bir PDF/A-3 dosyası, Almanya'nın B2B zorunluluğu ve EN 16931 ERP sistemleri için hazırdır.

Kendi alan şemanızı tanımlayın ve tam olarak ihtiyacınız olanı çıkarın veya PDF4me'nun karışık grupları otomatik olarak sınıflandırmasına ve her belgeyi türüne göre yönlendirmesine izin verin.

Word ve Excel'yu PDF'ya ve tersine dönüştürün, ardından Office dosyalarını birleştirin, bölün, filigran ekleyin ve parola ile koruyun; tüm bunları Office kurulumu gerektirmeden tek bir API üzerinden yapın.

QR, Code 128, Data Matrix ve 50'den fazla barkod türü oluşturun ve yerleştirin, bunları PDF'lerden ve resimlerden okuyun veya belge gruplarını barkod ayırıcılarla bölün.

Gizlilik ve güvenlik sonradan eklenmiş değil, bütünleşik olarak sunulmaktadır. İsviçre merkezli PDF4me, tarayıcıda tek bir dosyayı dönüştürseniz de API aracılığıyla milyonlarca dosyayı işleseniz de aynı veri işleme kurallarını uygular.
Yüklenen dosyalar, izole edilmiş bulut depolama alanında şifrelenir ve çevrimiçi araçlarda bir saat içinde veya API işlemi tamamlandıktan sonra birkaç dakika içinde otomatik olarak silinir. Paylaşım bağlantıları 14 gün sonra geçerliliğini yitirir. Yalnızca "Belgelerim"e açıkça kaydettiğiniz dosyaları saklarız.
Belge içeriğiniz hiçbir zaman model eğitimi için, ne bizim ne de başkasınınki için saklanmaz. Yapay zeka çıkarımı yalnızca istek sırasında tanımladığınız şema üzerinde çalışır. Bize gönderdiğiniz dosyaları işlemez, analiz etmez veya yeniden satmayız.
Satın alma veya GDPR incelemeleri için bir Veri Koruma Sözleşmesine mi ihtiyacınız var? PDF4me sözleşmesini ve işleme ve güvenlik eklerini indirin. Satış sürecini beklemeden bunları hukuk departmanınızla paylaşın.
Her tarayıcı yüklemesi, API çağrısı ve indirme işlemi HTTPS/TLS üzerinden gerçekleşir. Bir dosya işlenmek üzere bekletilirken şifrelenmiş halde kalır, kiracıdan bağımsızdır ve yalnızca işlem süresince bellekte tutulur.
Resmi bir ISO/IEC 27001 bilgi güvenliği yönetim sistemi uyguluyoruz: belgelenmiş politikalar, rol tabanlı erişim, değişiklik kontrolü, olay müdahalesi ve tedarikçi gözetimi; 2026 yılı için bağımsız bir denetim hedefleniyor.
Günlük kullanım için PDF araçları ve SDK'lar, otomasyon bağlantı elemanları (Make, Zapier, Power Automate, n8n) ve MCP içeren bir üretim REST API'si için tek bir platform. Şirket içinde bir PDF yığını oluşturmadan, belge özelliklerini ürününüzde kullanıma sunun.
Tarayıcınızda ücretsiz olarak dönüştürün, düzenleyin, birleştirin, sıkıştırın, imzalayın ve OCR yapın. Kurulum veya kayıt gerekmez.
API ile ücretsiz başlayın, ardından süresi dolmayan ön ödemeli paketlerle yükleme yapın. Tek seferlik ödeme, taahhüt yok ve her paket aylık plana eklenir.
Çağrı başına yaklaşık $0.050. Kredilerin süresi asla dolmaz.
Çağrı başına yaklaşık $0.045. Kredilerin süresi asla dolmaz.
Çağrı başına yaklaşık $0.038. Kredilerin süresi asla dolmaz.
Çağrı başına yaklaşık $0.036. Kredilerin süresi asla dolmaz.
Çağrı başına yaklaşık $0.033. Kredilerin süresi asla dolmaz.
Çağrı başına yaklaşık $0.026. Kredilerin süresi asla dolmaz.
En büyük ön ödemeli paketimizden daha fazlasına mı ihtiyacınız var? Özel toplu fiyatlandırma, faturalama koşulları ve özel destek için satış ekibimizle iletişime geçin.
Belge başına bir API çağrısı. Yüksek kaliteli dönüştürmeler, OCR ve yapay zeka özellikleri sayfa başına bir çağrı olarak sayılır. Aylık plana mı yoksa ücretsiz sürüme mi ihtiyacınız var? Tüm detaylar fiyatlandırma sayfasında.
Tüm fiyatlandırma ve API çağrı maliyetlerini inceleyin.API ile ürününüze entegre edin, kod yazmadan otomatikleştirin veya tarayıcınızdaki ücretsiz araçları kullanın. Başlamak için kredi kartına gerek yok.
curl -X POST https://api.pdf4me.com/v1/ConvertToPdfÜcretsiz erişim · Kredi kartı gerekmez