Spaces:
Sleeping
Sleeping
Update puppeteer_pdf.js
Browse files- puppeteer_pdf.js +3 -39
puppeteer_pdf.js
CHANGED
|
@@ -96,7 +96,7 @@ async function convertToPDF() {
|
|
| 96 |
document.head.appendChild(base);
|
| 97 |
}, baseUrl);
|
| 98 |
|
| 99 |
-
// Wait for images to load
|
| 100 |
await page.evaluate(async () => {
|
| 101 |
const selectors = Array.from(document.querySelectorAll("img"));
|
| 102 |
await Promise.all([
|
|
@@ -112,48 +112,12 @@ async function convertToPDF() {
|
|
| 112 |
]);
|
| 113 |
});
|
| 114 |
|
|
|
|
| 115 |
await page.emulateMediaType('screen');
|
| 116 |
-
|
| 117 |
-
// Remove any @media print rules
|
| 118 |
-
await page.evaluate(() => {
|
| 119 |
-
const styleSheets = Array.from(document.styleSheets);
|
| 120 |
-
for (const styleSheet of styleSheets) {
|
| 121 |
-
try {
|
| 122 |
-
const rules = Array.from(styleSheet.cssRules || []);
|
| 123 |
-
let rulesToDelete = [];
|
| 124 |
-
for (let i = 0; i < rules.length; i++) {
|
| 125 |
-
const rule = rules[i];
|
| 126 |
-
if (rule instanceof CSSMediaRule && rule.media.mediaText.includes('print')) {
|
| 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';
|
| 154 |
-
});
|
| 155 |
-
});
|
| 156 |
-
|
| 157 |
// Generate PDF path
|
| 158 |
const pdfPath = htmlFilePath.replace('.html', '.pdf');
|
| 159 |
|
|
|
|
| 96 |
document.head.appendChild(base);
|
| 97 |
}, baseUrl);
|
| 98 |
|
| 99 |
+
// Wait for images and fonts to load
|
| 100 |
await page.evaluate(async () => {
|
| 101 |
const selectors = Array.from(document.querySelectorAll("img"));
|
| 102 |
await Promise.all([
|
|
|
|
| 112 |
]);
|
| 113 |
});
|
| 114 |
|
| 115 |
+
// Emulate screen media (not print)
|
| 116 |
await page.emulateMediaType('screen');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
+
// Additional wait for rendering
|
| 119 |
await new Promise(resolve => setTimeout(resolve, 2000));
|
| 120 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
// Generate PDF path
|
| 122 |
const pdfPath = htmlFilePath.replace('.html', '.pdf');
|
| 123 |
|