python使用reportlab在任意PDF中添加文本内容(解决中文黑色方块问题)

首先下载一个PDF文件:

import io
import requests

def download_pdf():
    send_headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",
        "Connection": "keep-alive",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.8"}

    response = requests.get("https://www.africau.edu/images/default/sample.pdf", headers=send_headers)
    bytes_io = io.BytesIO(response.content)
    with open("sample.pdf", mode='wb') as f:
        f.write(bytes_io.getvalue())


download_pdf()

在这里插入图片描述
在这样的PDF上添加一个任意的字符串内容,可以使用如下程序:

import io
from PyPDF2 import PdfWriter, PdfReader, Transformation
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen.canvas import Canvas


def main():
    input_df = PdfReader(open("sample.pdf", "rb"))  # 输入
    output_pdf = open("output.pdf", "wb")  # 输出
    output = PdfWriter()
    for _tem_i, template_page in enumerate(input_df.pages):  # 循环每一页
        packet = io.BytesIO()
        # 设置中文(如果不这样设置中文,中文会变成黑色的方块)
        pdfmetrics.registerFont(TTFont("SimHei", "SimHei.ttf"))  # 步骤1
        canvas_draw = Canvas(packet,
                             pagesize=(input_df.pages[0].mediabox.width, input_df.pages[0].mediabox.height))
        canvas_draw.setFont("SimHei", 20)  # 支持中文
        canvas_draw.drawString(100, 500, "随便添加一句话")  # 添加内容
        
        canvas_draw.save()
        # 修改后啊
        template_page.add_transformation(Transformation().rotate(0).translate(tx=0, ty=0))
        template_page.merge_page(PdfReader(packet).pages[0])
        output.add_page(template_page)
        output.write(output_pdf)
    output_pdf.close()


if __name__ == '__main__':
    main()

出现黑色方块可以参考:解决python使用ReportLab添加中文黑色方块的问题

效果如下:
在这里插入图片描述

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

呆萌的代Ma

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

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

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

打赏作者

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

抵扣说明:

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

余额充值