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()

python使用reportlab在任意PDF中添加文本内容(解决中文黑色方块问题)_第1张图片
在这样的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添加中文黑色方块的问题

效果如下:
python使用reportlab在任意PDF中添加文本内容(解决中文黑色方块问题)_第2张图片

你可能感兴趣的:(自动化办公,python,pdf,开发语言)