mirror of
https://github.com/NohamR/pdfy.git
synced 2026-10-10 18:29:55 +00:00
Add image wait, base href and viewport for PDF
This commit is contained in:
@@ -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(
|
||||
'<head>',
|
||||
`<head><base href="${url}"><meta name="referrer" content="unsafe-url">`
|
||||
)
|
||||
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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 '<!DOCTYPE html>\n' + doc.documentElement.outerHTML
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}, baseUrl)
|
||||
})
|
||||
if (!html) throw new Error('Could not extract rendered content from iframe')
|
||||
return html
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user