Spaces:
Paused
Paused
nkw
commited on
Update index.js
Browse files
index.js
CHANGED
|
@@ -3,11 +3,12 @@ const app = express();
|
|
| 3 |
const puppeteer = require("puppeteer-extra");
|
| 4 |
const StealthPlugin = require("puppeteer-extra-plugin-stealth");
|
| 5 |
const bodyParser = require("body-parser");
|
| 6 |
-
const
|
|
|
|
| 7 |
|
| 8 |
app.use(bodyParser.json());
|
| 9 |
app.use(bodyParser.urlencoded({ extended: false }));
|
| 10 |
-
app.use(
|
| 11 |
|
| 12 |
puppeteer.use(StealthPlugin());
|
| 13 |
|
|
@@ -17,60 +18,47 @@ const initBrowser = puppeteer.launch({
|
|
| 17 |
headless: true,
|
| 18 |
});
|
| 19 |
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
const browser = await initBrowser;
|
| 22 |
const page = await browser.newPage();
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
const
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
});
|
| 29 |
-
|
| 30 |
-
const headers = response.headers();
|
| 31 |
-
const cookies = await page.cookies();
|
| 32 |
-
const cookieString = cookies?.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');
|
| 33 |
-
const content_html = await page.evaluate(() => {
|
| 34 |
-
return new XMLSerializer().serializeToString(document);
|
| 35 |
});
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
//await browser.close();
|
| 39 |
-
return {
|
| 40 |
-
headers,
|
| 41 |
-
cookies,
|
| 42 |
-
cookieString,
|
| 43 |
-
content_html,
|
| 44 |
-
screenData,
|
| 45 |
-
}
|
| 46 |
}
|
| 47 |
|
| 48 |
-
app.get("/",
|
| 49 |
res.send("Hello World");
|
| 50 |
});
|
| 51 |
|
| 52 |
-
app.post("/
|
| 53 |
const data = req.body;
|
| 54 |
-
if (!("
|
| 55 |
-
return res.
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
})
|
| 59 |
-
);
|
| 60 |
}
|
| 61 |
-
const
|
| 62 |
-
|
| 63 |
try {
|
| 64 |
-
const
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
);
|
| 68 |
} catch (e) {
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
})
|
| 73 |
-
);
|
| 74 |
}
|
| 75 |
});
|
| 76 |
|
|
|
|
| 3 |
const puppeteer = require("puppeteer-extra");
|
| 4 |
const StealthPlugin = require("puppeteer-extra-plugin-stealth");
|
| 5 |
const bodyParser = require("body-parser");
|
| 6 |
+
const multer = require("multer");
|
| 7 |
+
const markdownIt = require("markdown-it");
|
| 8 |
|
| 9 |
app.use(bodyParser.json());
|
| 10 |
app.use(bodyParser.urlencoded({ extended: false }));
|
| 11 |
+
app.use(multer().array(""));
|
| 12 |
|
| 13 |
puppeteer.use(StealthPlugin());
|
| 14 |
|
|
|
|
| 18 |
headless: true,
|
| 19 |
});
|
| 20 |
|
| 21 |
+
// Fungsi untuk mengonversi Markdown ke HTML
|
| 22 |
+
const convertMarkdownToHTML = (markdown) => {
|
| 23 |
+
const md = new markdownIt();
|
| 24 |
+
return md.render(markdown);
|
| 25 |
+
};
|
| 26 |
+
|
| 27 |
+
// Fungsi untuk membuat PDF dari Markdown
|
| 28 |
+
async function MdtoPdf(md, type) {
|
| 29 |
const browser = await initBrowser;
|
| 30 |
const page = await browser.newPage();
|
| 31 |
+
const htmlContent = convertMarkdownToHTML(md);
|
| 32 |
+
await page.setContent(htmlContent, { waitUntil: "domcontentloaded" });
|
| 33 |
+
const pdfBuffer = await page.pdf({
|
| 34 |
+
format: type || "A4",
|
| 35 |
+
printBackground: true,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
});
|
| 37 |
+
await browser.close();
|
| 38 |
+
return pdfBuffer;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
}
|
| 40 |
|
| 41 |
+
app.get("/", (req, res) => {
|
| 42 |
res.send("Hello World");
|
| 43 |
});
|
| 44 |
|
| 45 |
+
app.post("/mdtopdf", async (req, res) => {
|
| 46 |
const data = req.body;
|
| 47 |
+
if (!("md" in data)) {
|
| 48 |
+
return res.status(400).json({
|
| 49 |
+
error: "No markdown parameter in request",
|
| 50 |
+
});
|
|
|
|
|
|
|
| 51 |
}
|
| 52 |
+
const md = data["md"];
|
| 53 |
+
const type = data["type"] || "A4";
|
| 54 |
try {
|
| 55 |
+
const pdfBuffer = await MdtoPdf(md, type);
|
| 56 |
+
res.set("Content-Type", "application/pdf");
|
| 57 |
+
res.send(pdfBuffer);
|
|
|
|
| 58 |
} catch (e) {
|
| 59 |
+
res.status(500).json({
|
| 60 |
+
error: "Failed to generate PDF",
|
| 61 |
+
});
|
|
|
|
|
|
|
| 62 |
}
|
| 63 |
});
|
| 64 |
|