From bcb9c1e76755d7b18b38654232f762cd1a1f811f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=88=9A=28noham=29=C2=B2?=
<100566912+NohamR@users.noreply.github.com>
Date: Fri, 19 Jun 2026 17:47:29 +0200
Subject: [PATCH] Add image wait, base href and viewport for PDF
---
src/index.js | 9 ++++++---
src/pdf.js | 4 ++++
src/reader.js | 9 +++------
3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/index.js b/src/index.js
index 8d50106..4255b17 100644
--- a/src/index.js
+++ b/src/index.js
@@ -128,15 +128,18 @@ async function main () {
? resolveOutputPath(opts.output)
: getOutputFilename(title)
- const contentHtml = await extractRenderedContent(
- readerPage,
- `${EXTENSION_BASE}${extId}/data/reader/`
+ let contentHtml = await extractRenderedContent(readerPage)
+ contentHtml = contentHtml.replace(
+ '
',
+ ``
)
+ contentHtml = contentHtml.replace(/ loading="lazy"/g, '')
await readerPage.close()
const enhancedHtml = enhanceHtml(contentHtml, customCss)
const pdfPage = await browser.newPage()
+ await pdfPage.setViewport({ width: 1280, height: 7200 })
await generatePdf(pdfPage, enhancedHtml, outputFile)
await pdfPage.close()
} finally {
diff --git a/src/pdf.js b/src/pdf.js
index 01c39d2..c8983e3 100644
--- a/src/pdf.js
+++ b/src/pdf.js
@@ -43,6 +43,10 @@ export function enhanceHtml (html, customCss) {
export async function generatePdf (page, html, outputPath) {
await page.setContent(html, { waitUntil: 'networkidle0' })
+ await page.waitForFunction(
+ () => Array.from(document.images).every(img => img.complete),
+ { timeout: 15000, polling: 200 }
+ ).catch(() => logger.debug('Image wait timed out, continuing...'))
logger.info(`Generating PDF: "${outputPath}"`)
await page.pdf({
path: outputPath,
diff --git a/src/reader.js b/src/reader.js
index 6a10fce..92d4040 100644
--- a/src/reader.js
+++ b/src/reader.js
@@ -130,8 +130,8 @@ export async function waitForReaderView (page) {
logger.info('Article rendered.')
}
-export async function extractRenderedContent (page, baseUrl) {
- const html = await page.evaluate((extBase) => {
+export async function extractRenderedContent (page) {
+ const html = await page.evaluate(() => {
const iframe = document.querySelector('#content iframe')
if (!iframe) return null
try {
@@ -156,14 +156,11 @@ export async function extractRenderedContent (page, baseUrl) {
: inlineVars
}
- const b = doc.createElement('base')
- b.href = extBase
- doc.head.insertBefore(b, doc.head.firstChild)
return '\n' + doc.documentElement.outerHTML
} catch {
return null
}
- }, baseUrl)
+ })
if (!html) throw new Error('Could not extract rendered content from iframe')
return html
}