home chevron_right src chevron_right iLoveImg-Image2pdf.js
code

iLoveImg-Image2pdf.js

JavaScript 2.89 KB 99 baris visibility 25 views
open_in_new
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');
link

Direct URL

check Disalin!