ABDALLALSWAITI commited on
Commit
1fce321
·
verified ·
1 Parent(s): 67d9897

Update puppeteer_pdf.js

Browse files
Files changed (1) hide show
  1. puppeteer_pdf.js +37 -12
puppeteer_pdf.js CHANGED
@@ -24,8 +24,8 @@ if (!fs.existsSync(htmlFilePath)) {
24
  async function convertToPDF() {
25
  let browser;
26
  try {
27
- // Launch browser with more robust options
28
- browser = await puppeteer.launch({
29
  headless: 'new',
30
  args: [
31
  '--no-sandbox',
@@ -35,9 +35,37 @@ async function convertToPDF() {
35
  '--disable-features=IsolateOrigins',
36
  '--disable-site-isolation-trials',
37
  '--disable-accelerated-2d-canvas',
38
- '--disable-gpu'
 
 
 
 
 
 
 
 
 
 
39
  ]
40
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
  const page = await browser.newPage();
43
 
@@ -77,8 +105,8 @@ async function convertToPDF() {
77
  if (img.complete) return Promise.resolve();
78
  return new Promise((resolve) => {
79
  img.addEventListener("load", resolve);
80
- img.addEventListener("error", resolve); // Don't reject on error
81
- setTimeout(resolve, 5000); // Timeout after 5 seconds
82
  });
83
  }),
84
  ]);
@@ -99,29 +127,27 @@ async function convertToPDF() {
99
  rulesToDelete.push(i);
100
  }
101
  }
102
- // Delete in reverse order to avoid index shifting
103
  for (let i = rulesToDelete.length - 1; i >= 0; i--) {
104
  styleSheet.deleteRule(rulesToDelete[i]);
105
  }
106
  } catch (e) {
107
- // Ignore CORS errors on external stylesheets
108
  }
109
  }
110
  });
111
 
112
- // A more reliable wait
113
  await new Promise(resolve => setTimeout(resolve, 2000));
114
 
115
  // Adjust slide heights for proper page breaks
116
  await page.evaluate(() => {
117
  const coverPage = document.querySelector('.cover-page');
118
  if (coverPage) {
119
- coverPage.style.height = '100vh'; // A4 landscape height
120
  coverPage.style.breakAfter = 'page';
121
  }
122
  const slides = document.querySelectorAll('.slide');
123
  slides.forEach(slide => {
124
- slide.style.height = 'calc(100vh - 40px)'; // A4 landscape height minus some margin
125
  slide.style.breakInside = 'avoid';
126
  slide.style.pageBreakInside = 'avoid';
127
  slide.style.breakAfter = 'page';
@@ -159,7 +185,6 @@ async function convertToPDF() {
159
  pdfOptions.width = '210mm';
160
  pdfOptions.height = '297mm';
161
  } else {
162
- // Default to A4 landscape
163
  pdfOptions.format = 'A4';
164
  pdfOptions.landscape = true;
165
  }
 
24
  async function convertToPDF() {
25
  let browser;
26
  try {
27
+ // Launch browser with system Chromium
28
+ const browserOptions = {
29
  headless: 'new',
30
  args: [
31
  '--no-sandbox',
 
35
  '--disable-features=IsolateOrigins',
36
  '--disable-site-isolation-trials',
37
  '--disable-accelerated-2d-canvas',
38
+ '--disable-gpu',
39
+ '--single-process',
40
+ '--no-zygote',
41
+ '--disable-software-rasterizer',
42
+ '--disable-dev-tools',
43
+ '--no-first-run',
44
+ '--no-default-browser-check',
45
+ '--disable-breakpad',
46
+ '--disable-crash-reporter',
47
+ '--crash-dumps-dir=/tmp',
48
+ '--disable-component-update'
49
  ]
50
+ };
51
+
52
+ // Try to use system Chromium if available
53
+ const chromiumPaths = [
54
+ '/usr/bin/chromium',
55
+ '/usr/bin/chromium-browser',
56
+ '/usr/bin/google-chrome',
57
+ '/usr/bin/google-chrome-stable'
58
+ ];
59
+
60
+ for (const chromiumPath of chromiumPaths) {
61
+ if (fs.existsSync(chromiumPath)) {
62
+ browserOptions.executablePath = chromiumPath;
63
+ console.log(`Using Chromium at: ${chromiumPath}`);
64
+ break;
65
+ }
66
+ }
67
+
68
+ browser = await puppeteer.launch(browserOptions);
69
 
70
  const page = await browser.newPage();
71
 
 
105
  if (img.complete) return Promise.resolve();
106
  return new Promise((resolve) => {
107
  img.addEventListener("load", resolve);
108
+ img.addEventListener("error", resolve);
109
+ setTimeout(resolve, 5000);
110
  });
111
  }),
112
  ]);
 
127
  rulesToDelete.push(i);
128
  }
129
  }
 
130
  for (let i = rulesToDelete.length - 1; i >= 0; i--) {
131
  styleSheet.deleteRule(rulesToDelete[i]);
132
  }
133
  } catch (e) {
134
+ // Ignore CORS errors
135
  }
136
  }
137
  });
138
 
 
139
  await new Promise(resolve => setTimeout(resolve, 2000));
140
 
141
  // Adjust slide heights for proper page breaks
142
  await page.evaluate(() => {
143
  const coverPage = document.querySelector('.cover-page');
144
  if (coverPage) {
145
+ coverPage.style.height = '100vh';
146
  coverPage.style.breakAfter = 'page';
147
  }
148
  const slides = document.querySelectorAll('.slide');
149
  slides.forEach(slide => {
150
+ slide.style.height = 'calc(100vh - 40px)';
151
  slide.style.breakInside = 'avoid';
152
  slide.style.pageBreakInside = 'avoid';
153
  slide.style.breakAfter = 'page';
 
185
  pdfOptions.width = '210mm';
186
  pdfOptions.height = '297mm';
187
  } else {
 
188
  pdfOptions.format = 'A4';
189
  pdfOptions.landscape = true;
190
  }