src/iLoveImg-Image2pdf.js
/*
Scrape by dann
Fiture image to pdf
Tolong jangan fapus wm
Tinggalkan credit ini_
@dann
*/
import axios from 'axios';
import FormData from 'form-data';
import fs from 'fs';
import path from 'path';
const CONFIG = {
workerServer: 'https://api5.ilovepdf.com',
taskId: 'lbgkpmcwdng8d4zj914pk3sb556jnqyAqcyrgrggr0cvd83m4br6vrsvk6n0vqjyhv2r8qrt9c3hmcfpr1pmt2gc6fw5ftnry8fd268jw8y4Axnby1ktkky1kkss8vzhnmm03kr89A540rd9636Ahfc65skk78z8jAjd674295bztpxzxjyq',
token: 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIiLCJhdWQiOiIiLCJpYXQiOjE1MjMzNjQ4MjQsIm5iZiI6MTUyMzM2NDgyNCwianRpIjoicHJvamVjdF9wdWJsaWNfYzkwNWRkMWMwMWU5ZmQ3NzY5ODNjYTQwZDBhOWQyZjNfT1Vzd2EwODA0MGI4ZDJjN2NhM2NjZGE2MGQ2MTBhMmRkY2U3NyJ9.qvHSXgCJgqpC4gd6-paUlDLFmg0o2DsOvb1EUYPYx_E',
tool: 'imagepdf'
};
const commonHeaders = {
'Authorization': CONFIG.token,
'Accept': 'application/json'
};
async function runImageToPdf(localImagePath, outputPdfPath) {
try {
console.log('[1/3] Mengupload gambar ke server iLovePDF...');
if (!fs.existsSync(localImagePath)) {
throw new Error(`File gambar tidak ditemukan di path: ${localImagePath}`);
}
const form = new FormData();
form.append('task', CONFIG.taskId);
form.append('file', fs.createReadStream(localImagePath));
const uploadResponse = await axios.post(`${CONFIG.workerServer}/v1/upload`, form, {
headers: {
...commonHeaders,
...form.getHeaders()
}
});
const serverFilename = uploadResponse.data.server_filename;
console.log(`Berhasil: Gambar diupload. Server Filename: ${serverFilename}`);
console.log('[2/3] Memproses konversi gambar ke PDF...');
const processPayload = {
task: CONFIG.taskId,
tool: CONFIG.tool,
files: [
{
server_filename: serverFilename,
filename: path.basename(localImagePath),
rotate: 0
}
],
orientation: 'portrait',
margin: 0,
pagesize: 'fit'
};
await axios.post(`${CONFIG.workerServer}/v1/process`, processPayload, {
headers: commonHeaders
});
console.log('Berhasil: Proses konversi di server selesai.');
console.log(`[3/3] Mengunduh hasil file PDF ke: ${outputPdfPath}`);
const downloadResponse = await axios.get(
`${CONFIG.workerServer}/v1/download/${CONFIG.taskId}`,
{
headers: commonHeaders,
responseType: 'stream'
}
);
const writer = fs.createWriteStream(outputPdfPath);
downloadResponse.data.pipe(writer);
return new Promise((resolve, reject) => {
writer.on('finish', () => {
console.log('Selesai: File PDF berhasil disimpan.');
resolve();
});
writer.on('error', (err) => {
reject(err);
});
});
} catch (error) {
console.error('Error: Terjadi kesalahan:', error.response?.data || error.message);
}
}
runImageToPdf('./gambar.png', './hasil_konversi.pdf');
Direct URL
Disalin!