首先下载一个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添加中文黑色方块的问题