Emm因为我最近在参与报账,想在电子发票下面加一行字,这样每次就可以直接打印电子发票,不想再一遍遍手写同样的话了。
*需求:在已有pdf中,加入自定义文本。
实现如下:
#-*- coding = utf-8 -*-
#@Time : 2020/12/13 18:13
#@Author :Anq1
#@File : add_text.py
#@Software : PyCharm
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter,A4 #纸大小
from reportlab.pdfbase import pdfmetrics #可以写中文
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont("SimSun", "SimSun.ttf"))
# 应用注册的字体,github自己下一个,别忘了放在正确位置
packet = io.BytesIO()
# 使用Reportlab创建一个新的PDF
can = canvas.Canvas(packet, pagesize=A4)
can.setFont("SimSun", 18)
can.drawString(200, 50, "此发票票据实际粘贴附件 张,金额共 元。")
can.save()
#buffer从偏移0开始
packet.seek(0)
new_pdf = PdfFileReader(packet)
#读取已有的PDF
existing_pdf = PdfFileReader(open(r'C:\Users\user\Desktop\《软件体系结构》名词解释.pdf', "rb"))
output = PdfFileWriter()
#
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# 最后,向目标的pdf写出
outputStream = open("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()
(注:这里只实现了一页,多页pdf的话for循环pdf.getpage就好。)
因为这里放发票不太好。。所以读取的已有pdf是随便找的= =,效果如下。