Weasyprint 不渲染图像(Python)

问题描述 投票:0回答:2

我正在编写一个 python 脚本,它从一些图像和 svg 文件中生成一个 html 文件,稍后应将其转换为 pdf 文件。 对于转换,我使用 weasyprint,但由于某种原因,它不渲染图像,仅渲染相应的替代文本。 这是在 Chrome 中渲染的 html 文件的屏幕截图:

但是生成的pdf看起来像这样:

这是生成 pdf 的代码:

html = HTML(filename="path/to/file")
html.write_pdf("path/to/output/file")

这是相应的 html 文件:

<img src="C:/Users/jonas/Documents/Dev/PythonLabel/bin/LABEL_SVG.svg" alt="SVG of Label" />
<div class="sn-number">3253343345</div>
<img class="qr-code" src="C:/Users/jonas/Documents/Dev/PythonLabel/bin/qrcode.png" alt="qrcode" />

我不知道是什么原因导致了这个问题,但 Firefox 也无法渲染图像,但 Chrome 和 Brave 可以做到。也许这两个问题都有相似的原因。

python html pdf file-conversion weasyprint
2个回答
0
投票

所以我设法让它工作,但这不是一个很好的解决方案。 我发现 weasyprint 能够从 stackoverflow 等实际网页获取图像和 SVG。所以我制作了一个小 Flask 应用程序,它只提供一个 html 文件,在创建 PDF 后,我只是停止了 Flask 服务器。

from flask import Flask
from multiprocessing import Process

app = Flask(
    __name__, static_folder=path/to/static/folder)


@app.route("/")
def home():
    with open(path/to/html, "r") as f:
        html = "".join(f.readlines())
    return html


def start_server():
    app.run()


if __name__ == "__main__":
    server = Process(target=start_server)
    server.start()
    sleep(4)
    print("Generating PDF...")
    html = HTML(
        "http://localhost:5000").write_pdf(path/to/output/file)
    server.terminate()
    server.join()

0
投票

我今天遇到了同样的问题。通过在图像路径前面添加“file://”协议使其正常工作。

<img src="file:///path/to/my_file.svg" />
© www.soinside.com 2019 - 2024. All rights reserved.