# -*- coding: utf-8 -*- from tkinter import * from tkinter import messagebox from reportlab.pdfgen import canvas from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from PyPDF2 import PdfReader, PdfWriter import os class Application(Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.pack() self.createWidget() def createWidget(self): '''以下是GUI页面设置''' self.label01 = Label(self, text="文件路径:").grid(row=0, column=0) self.entry01 = Entry(self) self.entry01.grid(row=0, column=1) self.label02 = Label(self, text="文件名称:").grid(row=1, column=0) self.entry02 = Entry(self) self.entry02.grid(row=1, column=1) self.label03 = Label(self, text="水印文字内容:").grid(row=2, column=0) self.entry03 = Entry(self) self.entry03.grid(row=2, column=1) self.label04 = Label(self, text="水印文字大小:").grid(row=3, column=0) self.entry04 = Entry(self) self.entry04.grid(row=3, column=1) self.label05 = Label(self, text="(注:输入10-40之间)").grid(row=3, column=2) self.label06 = Label(self, text="水印文字角度:").grid(row=4, column=0) self.entry05 = Entry(self) self.entry05.grid(row=4, column=1) self.label07 = Label(self, text="(注:输入整数)").grid(row=4, column=2, sticky=W) Button(self, text="确认", command=self.create_add_watermark).grid(row=5, column=1, sticky=W) Button(self, text="取消", command=self.quit_tk).grid(row=5, column=1, sticky=E) def create_add_watermark(self): input_file = self.entry01.get() # 获取文件路径 input_filename = self.entry02.get() + ".pdf" # 获取文件名称 input_pdf = os.path.join(input_file, input_filename) # 进行拼接形成完成路径 output_filename = self.entry02.get() + "-(水印版).pdf" # 获取输出文件名称 output_pdf = os.path.join(input_file, output_filename) # 将添加的水印输出到同一文件夹 watermark_name = self.entry03.get() # 获取水印文字 # 让水印文字形成列表,用for循环生成对应水印文字的位置 watermark_texts = [(watermark_name, (i * 100, j * 120)) for i in range(8) for j in range(10)] watermark_pdf = "temp_watermark.pdf" # 临时创建一个pdf文件,用于存储水印文件,后面有进行移除 c = canvas.Canvas(watermark_pdf) # 创建pdf画板 font_size = int(self.entry04.get()) # 获取字体大小 pdfmetrics.registerFont(TTFont("SimHei", "SimHei.ttf")) # 注册字体,以适应中文字体 c.setFont("SimHei", font_size) # 设置字体及大小 c.setFillGray(0.8, 0.3) # 设置字体的透明度情况 font_rotate = int(self.entry05.get()) # 将以上文字及对应文字位置写入临时pdf文档,并保存 for text, position in watermark_texts: c.saveState() c.translate(position[0], position[1]) c.rotate(font_rotate) c.drawCentredString(0, 0, text) c.restoreState() c.save() with open(input_pdf, "rb") as input_file: # 打开读取要添加水印的文档 input_pdf_reader = PdfReader(input_file) output_pdf_writer = PdfWriter() with open(watermark_pdf, "rb") as watermark_file: # 打开临时水印文档 watermark_pdf_reader = PdfReader(watermark_file) watermark_page = watermark_pdf_reader.pages[0] # 获取页数 for i in range(len(input_pdf_reader.pages)): # 按页数一页一页写入 page = input_pdf_reader.pages[i] page.merge_page(watermark_page) output_pdf_writer.add_page(page) with open(output_pdf, "wb") as output_file: output_pdf_writer.write(output_file) # 保存水印文档 os.remove(watermark_pdf) # 移除临时水印文档 messagebox.showinfo("完成", f"水印已添加,文件保存为:{output_pdf}") def quit_tk(self): self.master.destroy() # GUI进行销毁退出 if __name__ == "__main__": root = Tk() root.geometry("500x300+200+200") root.title("PDF文档添加水印—V1.0 小新制作") app = Application(master=root) root.mainloop()
PDF添加水印完整python代码
最新推荐文章于 2024-10-02 10:53:34 发布