import axios from 'axios' import FormData from 'form-data' import fs from 'fs' import path from 'path' const BASE = 'https://api.ilovepdf.com' async function getPublicToken() { const res = await axios.get('https://www.ilovepdf.com/pdf_to_jpg', { headers: { 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36' } }) const match = res.data.match(/"token":"([^"]+)"/) if (!match) throw new Error('Token not found') return match[1] } async function startTask(token) { // endpoint publik yang bener const res = await axios.get(`${BASE}/v1/start/pdfjpg`, { headers: { Authorization: `Bearer ${token}` } }) // response: { server: 'api100.ilovepdf.com', task: 'xxx' } return { server: `https://${res.data.server}`, task: res.data.task } } async function uploadFile(server, task, token, filePath) { const form = new FormData() form.append('task', task) form.append('file', fs.createReadStream(filePath), path.basename(filePath)) const res = await axios.post(`${server}/v1/upload`, form, { headers: { Authorization: `Bearer ${token}`, ...form.getHeaders() } }) return res.data.server_filename } async function processTask(server, task, token, serverFilename, originalName, mode = 'pages', dpi = '150') { const form = new FormData() form.append('task', task) form.append('tool', 'pdfjpg') form.append('pdfjpg_mode', mode) form.append('dpi', dpi) form.append('output_filename', '{filename}_page') form.append('packaged_filename', 'ilovepdf_pages-to-jpg') form.append('files[0][server_filename]', serverFilename) form.append('files[0][filename]', originalName) await axios.post(`${server}/v1/process`, form, { headers: { Authorization: `Bearer ${token}`, ...form.getHeaders() } }) } async function downloadResult(server, task, token, outputPath) { const res = await axios.get(`${server}/v1/download/${task}`, { headers: { Authorization: `Bearer ${token}` }, responseType: 'arraybuffer' }) fs.writeFileSync(outputPath, res.data) } export async function pdfToJpg(filePath, outputPath = 'output.zip', { mode = 'pages', dpi = '150' } = {}) { console.log('Fetching token...') const token = await getPublicToken() console.log('Starting task...') const { server, task } = await startTask(token) console.log(`Server: ${server}, Task: ${task}`) console.log('Uploading...') const serverFilename = await uploadFile(server, task, token, filePath) console.log('Processing...') await processTask(server, task, token, serverFilename, path.basename(filePath), mode, dpi) console.log('Downloading...') await downloadResult(server, task, token, outputPath) console.log(`Done → ${outputPath}`) } pdfToJpg('./pdf.pdf', 'result.zip', { dpi: '300' })