python - 为什么 [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文件中也有换行!...)
你有什么建议?
解决方案
是的 !我改变了......停止使用 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。
- 我放了一个
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 初学者...
推荐阅读
- c - 为什么我的结构没有定义?C中的队列
- image - Unity 的运行时 AR 图像目标创建
- python - 将文件扩展名与使用的编程语言匹配
- ruby-on-rails - 保存失败时的rails回调
- regex - 布尔输出通过正则表达式检查字符串的格式
- java - java - 如何在Java中使用httpclient将文件签入/签出到SharePoint?
- javascript - 如何在 Bootstrap 中设置日期选择器的日期值?
- r - R sf::st_read 连接到 postgis
- javascript - 在ngIf(Angular 5)之后获取父元素的子元素
- java - 以编程方式启用通知渠道