我尝试使用 weasyprint Python 3 API 将“xhtml 网页”转换为“A4 纵向 pdf”。 是页面。
但最终的 pdf 文件不适合 A4 页面。
这是python代码:

#!/usr/bin/python3

from weasyprint import HTML, CSS
import subprocess

Page = HTML(url="https://educadhoc.hachette-livre.fr/extract/complet/9782401058705/show-page/page325.xhtml")
Style = CSS(string='''
    @page {
        size: A4 portrait;
        max-height:100%;
        max-width:100%;
        }
''')
Page.write_pdf(target="Try.pdf", zoom=1, stylesheets=[Style])
subprocess.Popen(["evince", "Try.pdf"])

即使在 CSS 样式中使用“size A4 Portrait”和 write_pdf 方法中的“zoom=1”,它也不适合 A4!
(pdf文件中也有换行!...)
你有什么建议?

#1楼 票数:0

是的 ! 我改变了......停止使用Weasyprint并转到selenium,更可定制

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


######  SELENIUM PARAMETERS
path_to_binary = "/usr/bin/firefox-esr"
path_to_webdriver = "/usr/local/bin/geckodriver"
capabilities = webdriver.DesiredCapabilities().FIREFOX
my_options = Options()
my_options.headless = True
my_options.add_argument("--width=1426")
my_options.add_argument("--height=2048")
my_options.binary_location = path_to_binary
my_service = Service(path_to_webdriver)


######  GO GO GO !
driver = webdriver.Firefox(service=my_service, options=my_options)
driver.get("https://educadhoc.hachette-livre.fr/extract/complet/9782401058705/show-page/page325.xhtml")
driver.execute_script("document.body.style.transform = 'scale(3)'")
driver.find_element_by_tag_name("body").screenshot("TRY.png")
driver.implicitly_wait(2)
driver.close()
  • 它就像一个魅力,但在一个 png 图像文件中(还不错); 根据 Firefox 检查器,原始网页为 1426x2048。
  • 我在driver.execute_script行中放置了一个scale(3) ,您可以根据自己的情况进行调整,以便将图像尺寸和质量提高 3 倍......(但重 3 倍!)
  • 您需要在正确的路径(在我的情况下为/usr/local/bin/geckodriver )中安装一个 webdriver(在我的情况下是 firefox 的),并且您也必须找到二进制路径( /usr/local/bin/firefox-esr在我的情况下)。
  • Firefox 的最后一个 webdriver(适用于 Linux、Mac 或 Win)可从以下网址下载: https : //github.com/mozilla/geckodriver/releases
  • 然后,你可以用这个 PNG 文件做你想做的事! (例如,如果需要,请使用imagemagick将其转换为 pdf 等不同格式...)转换链接

  • 希望它能帮助你和其他 Python 初学者......

  ask by debiansid translate from so

未解决问题?本站智能推荐:

2回复

Django 和 weasyprint,合并 pdf

可以使用 weasyprint 在 django 中合并多个 pdf 吗? 我有这样的事情: 但是我无法加入这两个文件,总是只输出第一个模板,是否可以将两个文档合并为一个 pdf? 你能帮我吗? 谢谢。
1回复

如何将使用weasyprint从html转换为PDF的html文件设置为页面宽度和高度的100%

我用于生成PDF代码: 这是final_html字符串的内容: pdf始终作为页面的一部分生成,而我希望它覆盖整个pdf页面。
1回复

如何从PDF中删除边距? (使用WeasyPrint生成)

我正在尝试在Flask应用程序中渲染PDF文档。 为此,我使用以下HTML模板: 我在标题部分的顶部和右侧/左侧始终获得白色边距: 有没有办法删除它们? 编辑: 下面是用于在我的Flask应用中使用WeasyPrint生成PDF文件的代码:
1回复

使用Weasyprint从Django视图生成多个PDF

当用户单击下载按钮时,我要生成多个pdf当前只能生成一个PDF 我想要的是当用户单击带有weasyprint的下载按钮时,从Django视图生成两个PDF。 下面的代码仅生成单个PDF 此响应应生成两个PDF,这可能吗? 请帮忙谢谢
1回复

WeasyPrint:固定页脚标签在每个pdf页面上由长表重叠

由于WeasyPrint,我用Django生成了一个用pdf渲染的表格 。 这个表可能很长(说行数),所以可能会在几页pdf结果中结束。 我必须在页面的每一端都包含一个静态页脚,所以我应用了css 固定规则。 我的问题是这个页脚与很长的表重叠。 我如何要求WeasyPrint(通
1回复

weasyprint呈现不完整文本的PDF文件

我正在使用python中的weasyprint库来呈现各种房地产广告的PDF传单。 但是,渲染文件中的某些文本缺少整个句子的一部分。 文字为捷克语。 例如,输入文本:“ 3。nadzemnímpodlažíbytovéhodomu svýtahem”。 PDF格式的呈现文本:“Z
1回复

WeasyPrint 在保存的 PDF 文件中不显示 PNG(Flask 应用程序)

我正在创建一个 Flask 应用程序,它显示一些结果和这些结果的图表。 我想让结果和图表以 PDF 格式可供下载。 使用 Wea​​syPrint,我能够很好地呈现 HTML 结果。 但是,我无法渲染 PNG。 PNG 保存在我的 Flask 应用程序的“静态”文件夹中。我使用 pythonany
1回复

使用 jinja2 和 weasyprint 在 PDF 渲染中忽略图像

我在 python 中运行一个分析脚本,它给了我一些变量和一个我保存为png文件的图像。 然后我使用jinja2将它们填充到html模板中,并使用weasyprint将 html 呈现为我保存的 PDF 文件。 这里有很多问题可以解决这个问题,但没有一个建议的解决方案可以解决我的问题。 我需要将图