const express = require("express"); const app = express(); const puppeteer = require("puppeteer-extra"); const StealthPlugin = require("puppeteer-extra-plugin-stealth"); const bodyParser = require("body-parser"); const multer = require("multer"); const markdownIt = require("markdown-it"); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(multer().array("")); puppeteer.use(StealthPlugin()); const initBrowser = puppeteer.launch({ executablePath: process.env.CHROME_BIN || null, defaultViewport: null, headless: true, }); // Fungsi untuk mengonversi Markdown ke HTML const convertMarkdownToHTML = (markdown) => { const md = new markdownIt(); return md.render(markdown); }; // Fungsi untuk membuat PDF dari Markdown async function MdtoPdf(md, cssCustom, type) { const browser = await initBrowser; const page = await browser.newPage(); const htmlContent = convertMarkdownToHTML(md); const fullHtmlContent = ` ${htmlContent} `; await page.setContent(fullHtmlContent, { waitUntil: "networkidle0" }); const pdfBuffer = await page.pdf({ format: type || "A4", printBackground: true, margin: { top: "10mm", // Jarak atas bottom: "10mm", // Jarak bawah left: "10mm", // Jarak kiri right: "10mm", // Jarak kanan }, }); await page.close(); return pdfBuffer; } app.get("/", (req, res) => { res.send("Hello World"); }); app.post("/mdtopdf", async (req, res) => { const data = req.body; if (!("md" in data)) { return res.status(400).json({ error: "No markdown parameter in request", }); } const md = data["md"]; const css = data["css"]; const type = data["type"] || "A4"; try { const pdfBuffer = await MdtoPdf(md, css, type); res.set("Content-Type", "application/pdf"); res.send(pdfBuffer); } catch (e) { res.status(500).json({ error: "Failed to generate PDF", }); } }); app.listen(8080, () => console.log("Server running at port 8080"));