首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python PDFkit将NextJS网站转换为pdf

如何使用python PDFkit将NextJS网站转换为pdf
EN

Stack Overflow用户
提问于 2022-09-30 13:41:46
回答 3查看 243关注 0票数 0

我尝试使用pdfkit将网页转换为PDF。当使用诸如google.com这样的URL时,这很好。但是当我试图转换NextJS中的网页构建时,PDF一直在加载,没有任何响应。

我以imbd.com为例,因为他们也在使用NextJS。

代码语言:javascript
复制
import pdfkit

try:
    options = {
        # 'page-size': 'A4',
        'encoding': 'utf-8',
        'margin-top': '0cm',
        'margin-bottom': '0cm',
        'margin-left': '0cm',
        'margin-right': '0cm',
        # 'image-quality': '1000',
        # 'image-dpi': '2000',
        'disable-smart-shrinking': '',
        'page-width': '595px',
        'page-height': '842px',
        'no-outline': None,
        'javascript-delay': '1000',
        "load-error-handling": "ignore"

    }
    pdfkit.from_url(
        'https://www.imdb.com/', 'out.pdf', options=options, verbose=True)
except Exception as e:
    raise e

我想要解决的是:

当运行上面的脚本时,什么都不会发生。而且在调试时也没有错误日志记录,我可以使用。

更新

在调试过程中,我试图直接与wkhtmltopdf交互,但仍然没有得到任何输出。

我的命令:

$ wkhtmltopdf --javascript-延迟5000 -调试-javascript http://imdb.com out.pdf

输出:装载机冻结在87%,没有输出可以帮助我找出出了什么问题。

代码语言:javascript
复制
Loading pages (1/6)
[====================================================>       ] 87%
EN

回答 3

Stack Overflow用户

发布于 2022-10-01 06:24:12

在您的options对象中,在‘javascript’下,尝试将阈值提高到5000。

票数 0
EN

Stack Overflow用户

发布于 2022-10-02 14:20:44

您没有使用正确的包,pdfkit有利于捕获服务器端呈现的站点。像React这样的NextJs不会在服务器和服务器上呈现呈现的HTML,但是它们呈现在客户端,因此永远等待呈现。为此,您可以尝试通过使用curl获取网站的HTML来查看不同之处,您将看到大量在客户端呈现的javascript。

为此,您需要一个使用无头铬的库(例如,我建议使用pyhtml2pdf )。你需要:

代码语言:javascript
复制
pip install pyhtml2pdf
#install also chrome or chromium if is not installed 
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt -y install ./google-chrome-stable_current_amd64.deb

在您使用下面的简单代码捕获网站之后:

代码语言:javascript
复制
from pyhtml2pdf import converter

converter.convert('https://www.imdb.com', 'sample.pdf')

按预期工作,并呈现网站。

票数 0
EN

Stack Overflow用户

发布于 2022-10-03 00:03:45

您有两个主要的问题,一个是浏览器安全,另一个打印网页为PDF。

到目前为止,最简单的打印网站的方法是使用浏览器,这样引用就没有问题了。

代码语言:javascript
复制
Chrome --headless [Disable$*] --run-all-compositor-stages-before-draw --print-to-pdf-no-header --print-to-pdf="/folder/out.pdf" https://www.imdb.com 
  • “禁用$”是一长串基于浏览器配置的选项列表。

主要的问题是,它将是完美的/准确的,就像你点击打印一个网页到pdf,而不调整任何打印设置。因此,它应该是A4肖像,因此媒体框不应该是一个问题,但是设置边距更困难,特别是因为它不是设计为命令行驱动的,因此需要一个木偶师(或者更简单地用于基本用法,例如sendkey)。

如果您需要进行商业级别的调整,那么考虑一个商业的URL2PDF SDK/API解决方案,有几个设计用于使用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73909705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档