python生成中文PDF文件的5个方法

  1. ReportLab

    ReportLab是最常用的Python生成PDF的库。ReportLab库支持包括文字、线条、配色、图形、图片等在内的多种元素绘制,但默认不支持中文。

    中文字体支持:简单下载并安装一个开源的中文字体,例如思源黑体雅黑,然后在ReportLab中使用。

    from reportlab.lib.pagesizes import letter, A4
    from reportlab.pdfbase import pdfmetrics
    from reportlab.pdfbase.ttfonts import TTFont
    from reportlab.pdfgen import canvas
    
    pdfmetrics.registerFont(TTFont('雅黑', 'Yahei Mono.ttf'))
    
    c = canvas.Canvas("Report.pdf", pagesize=letter)
    c.setFont('雅黑', 12)
    c.drawString(30, 750, '你好,这是一个示例文本')
    c.save()
    
    
  2. PDFLaTeX

    PDFLaTeX是一种通过LaTeX语法生成PDF的Python库。

    中文字体支持:在TeXLive中安装xelatex或lualatex,并使用CTeX宏包。

    from pylatex import Document, Section, Subsection, Command
    from pylatex.utils import italic, NoEscape
     
    geometry_options = {"tmargin": "1cm", "lmargin": "10cm"}
    doc = Document(geometry_options=geometry_options)
     
    with doc.create(Section('你好')):
        doc.append('这是一个示例文本')
    
    doc.generate_pdf('hello_world', compiler='xelatex')
    
    
  3. WeasyPrint

    WeasyPrint 是一个将HTML+CSS内容转换为PDF的Python库,非常适合需要首先通过HTML生成内容,然后再转成PDF的情况。

    中文字体支持:在HTML中直接引用例如思源黑体雅黑这样的开源字体文件,或者在系统中预先下载并安装。

    from weasyprint import HTML
    
    HTML(string="<h1 style='font-family:微软雅黑;'>你好,世界</h1>").write_pdf("hello.pdf")
    
    
  4. Pypdf2

    PyPDF2 是最常用的PDF处理库,它支持PDF的分页、合并、剪辑以及插入图片、文字等内容。但是,需要注意的是插入的文字默认不支持中文。

    中文字体支持:Pypdf2自身不支持中文,需要结合其他支持中文字体的库如pdfminerPyMuPDF处理中文。

  5. PyMuPDF (fitz)

    PyMuPDF 支持PDF以及其他格式的文件读写,除了文字,还支持插入图形、图片等元素。

    中文字体支持:直接使用系统中的已安装字体或者自己下载一个开源中文字体并安装,例如思源黑体雅黑

    import fitz
    
    doc = fitz.open()
    page = doc.new_page()
    
    text = "你好,世界"
    page.insert_text((100,100), text, fontname='雅黑')
    
    doc.save("output.pdf")
    
    注意:以上代码的演示环境假设你已经在系统中安装了对应的字体。如果报错,可能是因为字体名称不正确或者未在系统中安装字体。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hailey的算法学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值