Markdown-To-PDF / index.js
nkw
Update index.js
16d3be6 verified
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 = `
<html>
<head>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+Arabic&display=swap" rel="stylesheet">
<style>
body {
font-family: 'Noto Sans Arabic', sans-serif;
margin: 0;
padding: 0;
}
${cssCustom}
</style>
</head>
<body>
${htmlContent}
</body>
</html>
`;
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"));