如何在Django中使用pdfkit生成PDF?wkhtmltopdf找不到错误如何解决
排查与解决步骤
1. 确认是否安装wkhtmltopdf
pdfkit是基于wkhtmltopdf封装的Python工具,本身不包含HTML转PDF的核心能力,需要单独安装wkhtmltopdf独立程序:
- Windows:下载对应系统架构的安装包安装,记录下安装目录中
bin文件夹下wkhtmltopdf.exe的完整路径,例如C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe - macOS:通过Homebrew执行命令
brew install wkhtmltopdf完成安装 - Debian/Ubuntu系列Linux:执行命令
sudo apt install wkhtmltopdf完成安装 - CentOS/RHEL系列Linux:执行命令
sudo yum install wkhtmltopdf完成安装
2. 验证安装与系统路径配置
安装完成后在终端执行wkhtmltopdf --version,如果正常输出版本号说明安装成功且系统已识别程序路径。如果仍提示找不到命令,需将wkhtmltopdf所在的bin目录手动添加到系统环境变量PATH中,重启终端/项目进程后重试。
3. 检查可执行文件权限
如果确认已安装仍报错,需要确认运行Django项目的进程对wkhtmltopdf可执行文件具备读取、执行权限:
- Linux/macOS下可执行
chmod +x <你的wkhtmltopdf完整路径>赋予执行权限 - Windows下检查运行Django的用户账户对wkhtmltopdf所在目录有读取权限
4. 代码中手动指定程序路径
如果不想修改系统环境变量,也可以直接在业务代码中显式传入wkhtmltopdf的路径,修改对应代码即可:
def customer_render_pdf_view(request, *args, **kwargs): pk = kwargs.get('pk') customer = get_object_or_404(Person, pk=pk) enrolment = get_object_or_404(Enrollment,pk=pk) template_path = 'test.html' context = {'customer': customer, 'enrolment':enrolment} template = get_template(template_path) html = template.render(context) # 新增配置:指定wkhtmltopdf路径,替换为你自己的实际路径 config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe') # 调用时传入configuration参数 pdf = pdfkit.from_string(html, False, configuration=config) response = HttpResponse(pdf, content_type='application/pdf' ) # 优化响应头写法,兼容更多浏览器的文件名识别 response['Content-Disposition'] = 'attachment; filename="report.pdf"' return response
Linux/macOS下的路径示例为/usr/local/bin/wkhtmltopdf。
内容的提问来源于stack exchange,提问作者Zura Begadze
相关产品推荐
相关产品推荐

