nkw commited on
Commit
3151f31
·
verified ·
1 Parent(s): c5b58ab

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +32 -44
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 mutler = require("multer");
 
7
 
8
  app.use(bodyParser.json());
9
  app.use(bodyParser.urlencoded({ extended: false }));
10
- app.use(mutler().array(""));
11
 
12
  puppeteer.use(StealthPlugin());
13
 
@@ -17,60 +18,47 @@ const initBrowser = puppeteer.launch({
17
  headless: true,
18
  });
19
 
20
- async function getDataWebsite(url) {
 
 
 
 
 
 
 
21
  const browser = await initBrowser;
22
  const page = await browser.newPage();
23
- await page.setViewport({width: 1920, height: 1080});
24
-
25
- const response = await page.goto(url, {
26
- timeout: 0,
27
- waitUntil: 'networkidle0',
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
- const screenData = await page.screenshot({encoding: 'binary', type: 'jpeg', quality: 100});
37
- await page.close();
38
- //await browser.close();
39
- return {
40
- headers,
41
- cookies,
42
- cookieString,
43
- content_html,
44
- screenData,
45
- }
46
  }
47
 
48
- app.get("/", async (req, res) => {
49
  res.send("Hello World");
50
  });
51
 
52
- app.post("/getDataWebsite", async (req, res) => {
53
  const data = req.body;
54
- if (!("url" in data)) {
55
- return res.type("json").send(
56
- JSON.stringify({
57
- error: "no url parameter in request",
58
- })
59
- );
60
  }
61
- const url = data["url"];
62
-
63
  try {
64
- const response = await getDataWebsite(url);
65
- return res.type("json").send(
66
- JSON.stringify(response)
67
- );
68
  } catch (e) {
69
- return res.type("json").send(
70
- JSON.stringify({
71
- error: "can't open page",
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