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

使用WeasyPrint转HTML为PDF遇错求修正(报错:需字节对象而非NoneType)

解决WeasyPrint转换HTML到PDF的报错问题

错误原因

你的代码里html.write_pdf(pdf_file_path)方法本身会直接将PDF内容写入指定路径的文件,它的返回值是None。你后续又尝试把这个None写入文件,就触发了a bytes-like object is required, not 'NoneType'错误。

修正方案

方案1:直接写入文件(最简方式)

直接调用write_pdf并传入输出路径,无需额外处理返回值:

def pdf_generate():
    try:
        html_file_path = 'farm_management/scripts/56129.html'
        html = HTML(filename=html_file_path)
        pdf_file_path = 'my_pdf_file.pdf'
        
        # 直接将PDF写入指定路径
        html.write_pdf(pdf_file_path)
        
        print(f'PDF file has been written to: {pdf_file_path}')
    except Exception as e:
        print(str(e))

方案2:获取字节数据后自行处理

如果需要先拿到PDF的字节内容(比如后续要上传、加密等),可以不传路径,接收返回的字节数据再写入文件:

def pdf_generate():
    try:
        html_file_path = 'farm_management/scripts/56129.html'
        html = HTML(filename=html_file_path)
        pdf_file_path = 'my_pdf_file.pdf'
        
        # 获取PDF字节数据
        pdf_bytes = html.write_pdf()
        with open(pdf_file_path, 'wb') as f:
            f.write(pdf_bytes)
        
        print(f'PDF file has been written to: {pdf_file_path}')
    except Exception as e:
        print(str(e))

批量转换大量HTML文件

如果要处理目录下所有HTML文件,可以用以下批量处理函数:

import os
from weasyprint import HTML

def batch_html_to_pdf(html_dir, output_dir):
    # 确保输出目录存在,不存在则创建
    os.makedirs(output_dir, exist_ok=True)
    
    # 遍历目录下所有HTML文件
    for filename in os.listdir(html_dir):
        if filename.lower().endswith('.html'):
            html_full_path = os.path.join(html_dir, filename)
            # 生成对应的PDF文件名
            pdf_filename = os.path.splitext(filename)[0] + '.pdf'
            pdf_full_path = os.path.join(output_dir, pdf_filename)
            
            try:
                html = HTML(filename=html_full_path)
                html.write_pdf(pdf_full_path)
                print(f'转换完成:{pdf_full_path}')
            except Exception as e:
                print(f'转换失败 {html_full_path}: {str(e)}')

# 使用示例:转换指定目录下所有HTML文件到输出目录
batch_html_to_pdf('farm_management/scripts', 'pdf_output')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:05:11