Semua yang Anda butuhkan untuk membangun di atas API PDF4me.
Dapatkan kunci API, panggil satu endpoint REST untuk operasi dokumen apa pun, dan kirim. Konversi, OCR, gabungkan, hasilkan, dan beri barcode pada dokumen dari bahasa apa pun.
Jalani hidup dalam tiga langkah.
- 1. Ambil kunci Anda. Buat akun dan hasilkan kunci API di dasbor.
- 2. Panggil sebuah endpoint. Kirimkan dokumen base64 dan opsi JSON ke
https://api.pdf4me.com/api/v2/<Action>. - 3. Ambil berkas Anda. Respons tersebut mengembalikan file yang telah diproses; pekerjaan yang memakan waktu lama akan mengembalikan URL status untuk dipantau.
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"
}'Dirancang untuk pengembang.
Contoh nyata yang dapat dijalankan langsung dari contoh sumber terbuka kami. Pilih titik akhir dan bahasa,
Salin seluruh file, lalu jalankan. Itulah keseluruhan API-nya.
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 }; Salin-tempel dari GitHub.
Setiap endpoint dilengkapi dengan contoh yang dapat dijalankan dalam Node.js, Python, C#, dan Java, dalam satu repositori yang dapat Anda klon hari ini. Tambahkan kunci Anda dan jalankan.
pdf4me-api-samples
Contoh yang dapat dijalankan per-endpoint dalam Node.js, Python, C#, dan Java. Kloning, masukkan kunci API Anda, dan jalankan.
Buka di GitHubPenguji API URL
Cobalah akses ke endpoint apa pun dari browser tanpa pengaturan apa pun, lalu salin permintaan persis yang dibuatnya.
Buka pengujiSemua repositori & alat bantu
Contoh, konektor, dan alat bantu terbuka untuk seluruh platform PDF4me, tersedia di organisasi GitHub kami.
Jelajahi organisasiSatu API, setiap operasi dokumen.
Buka sebuah kategori untuk melihat titik akhirnya, masing-masing dengan deskripsi dan tautan ke dokumentasi.
Lebih dari sekadar kunci API.
Semua hal di sekitar titik akhir yang mengantarkan Anda dari pengujian pertama hingga produksi.
Kunci & lingkungan
Buat, putar, dan tetapkan cakupan kunci API per lingkungan, langsung dari dasbor.
Kelola kunciPenggunaan & analitik
Pantau volume panggilan Anda dan lacak penggunaan sesuai dengan paket Anda agar tidak ada hal yang mengejutkan Anda dalam skala besar.
Secara default bersifat asinkron.
Proses yang memakan waktu lama akan mengembalikan URL status yang dapat Anda pantau terus hingga file yang diproses siap.
Bahasa apa pun, tanpa SDK.
HTTPS biasa dengan header Basic Auth. Panggil dari runtime mana pun; pustaka resmi bersifat opsional.
Konektor tanpa kode
Tindakan dokumen yang sama terdapat di dalam Zapier, Make, Power Automate, dan n8n.
Lihat konektorDokumentasi untuk setiap endpoint
Bentuk referensi, permintaan, dan respons, serta contoh salin-tempel untuk setiap tindakan.
Baca dokumennyaSelesaikan dokumen Anda.
Integrasikan ke dalam produk Anda dengan API, otomatiskan tanpa perlu menulis kode, atau gunakan alat gratis di browser Anda. Tidak perlu kartu kredit untuk memulai.
curl -X POST https://api.pdf4me.com/v1/ConvertToPdfTingkat gratis · Tidak memerlukan kartu kredit