You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用pdfkit转换ABFSS路径HTML为PDF找不到文件问题咨询

问题原因分析

两次报错对应两个独立的问题:

  1. No such file: abfss://xxx报错的核心原因是:pdfkit底层依赖的wkhtmltopdf仅支持读取本地文件系统路径,无法直接识别Azure Data Lake Storage Gen2的abfss协议路径。mssparkutils是Spark生态专门适配了ADLS存储的工具,因此可以正常写入读取abfss路径,但pdfkit无该适配能力,无法直接读取目标文件。
  2. No wkhtmltopdf executable found报错的核心原因是:pdfkit只是wkhtmltopdf工具的Python封装层,本身不携带wkhtmltopdf的二进制执行文件,运行环境中未提前安装该依赖。

解决步骤

第一步:安装wkhtmltopdf依赖

根据运行环境选择对应的安装命令,以常见的Debian/Ubuntu基础的Synapse Spark环境为例,在notebook开头执行:

!apt-get update && apt-get install -y wkhtmltopdf

安装完成后执行如下命令验证安装结果,获取wkhtmltopdf的执行路径:

!which wkhtmltopdf

返回结果一般为/usr/bin/wkhtmltopdf,后续调用pdfkit时可手动指定该路径避免识别失败:

import pdfkit
# 替换为上一步获取到的实际路径
wk_config = pdfkit.configuration(wkhtmltopdf="/usr/bin/wkhtmltopdf")

第二步:中转处理ADLS文件

不要直接将abfss路径传入pdfkit,先通过mssparkutils将文件下载到本地临时目录处理,完成后再回传到ADLS即可,完整示例代码如下:

# 原ADLS存储路径
html_adls_path = "abfss://container@DataLakeName.dfs.core.windows.net/user/trusted-service-user/for_html/htmltest.html"
pdf_adls_path = "abfss://container@DataLakeName.dfs.core.windows.net/user/trusted-service-user/for_html/htmltest.pdf"

# 本地临时路径
local_html = "/tmp/htmltest.html"
local_pdf = "/tmp/htmltest.pdf"

# 下载HTML文件到本地
mssparkutils.fs.get(html_adls_path, local_html)

# 执行PDF转换,替换为你自己的options配置
myoptions = {}
pdfkit.from_file(local_html, local_pdf, options=myoptions, configuration=wk_config)

# 转换完成后将PDF上传回ADLS
mssparkutils.fs.put(local_pdf, pdf_adls_path, overwrite=True)

内容的提问来源于stack exchange,提问作者AlwaysWondering

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:09:02