首页 > 解决方案 > 为什么 [tag:weasyprint] xhtml-to-pdf 不适合 A4 页面?

问题描述

我尝试使用 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 样式中的“尺寸 A4 肖像”和 write_pdf 方法中的“缩放 = 1”,它也不适合 A4!
(pdf文件中也有换行!...)
你有什么建议?

标签: pythonpdfxhtmlweasyprint

解决方案


是的 !我改变了......停止使用 Wea​​syprint 并转到 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。
  • 我放了一个scale(3)你可以根据你自己调整的内容driver.execute_script,以便获得 3 倍高的图像尺寸和质量......(但更重 3 倍!)
  • 您需要在正确的路径(/usr/local/bin/geckodriver在我的情况下)中安装 webdriver(在我的情况下是 firefox 的),并且您也必须找到二进制路径(/usr/local/bin/firefox-esr在我的情况下)。
  • Firefox 的最后一个网络驱动程序(适用于 Linux、Mac 或 Win)可在以下位置下载:https ://github.com/mozilla/geckodriver/releases
  • 然后,你可以用这个 PNG 文件做你想做的事!(例如imagemagick,如果您愿意,可以使用转换为不同的格式,如 pdf ......)链接到转换

  • 希望它可以帮助您和其他 Python 初学者...


推荐阅读