Spaces:
Paused
Paused
File size: 2,386 Bytes
d456a76 1576c93 d456a76 4f1ca17 3151f31 1576c93 4f1ca17 3151f31 4f1ca17 d456a76 4f1ca17 6802ffc d456a76 6802ffc 4f1ca17 3151f31 16d3be6 d456a76 3151f31 8a591bb 16d3be6 8a591bb 7dda8bc 16d3be6 205ee52 16d3be6 8a591bb 205ee52 8a591bb 16d3be6 3151f31 16d3be6 d456a76 74e1c38 3151f31 4f1ca17 3151f31 d456a76 9c34b87 3151f31 d456a76 3151f31 d456a76 3151f31 16d3be6 3151f31 d456a76 16d3be6 3151f31 d456a76 3151f31 d456a76 4f1ca17 1576c93 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
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")); |