|
- import fitz # PyMuPDF
- import PyPDF2
- from PIL import Image
- class pdfEditor():
- def __init__(self,pdf_path):
- self.pdf_document = fitz.open(pdf_path)
-
- def find_text_positions(self, search_text):
- positions = []
- # 遍历每一页
- for page_num in range(self.pdf_document.page_count):
- page = self.pdf_document.load_page(page_num)
- # 获取页面的文本块和位置信息
- text_blocks = page.get_text_blocks()
-
- # 解析文本块并查找特定文本的位置
- for block in text_blocks:
- word = block[4]
- if search_text in word:
- # 获取单词在页面上的位置(矩形框)
- rect = block[0:4]
- # 将位置信息添加到列表中
- positions.append((page_num, rect))
- return positions
- def insert_pic_in_pdf(self,image_path,positions = [(0,(0,0,0,0))],relative_pos = [-20,-20]):
-
- for position in positions:
- # 选择要插入图片的页面(例如第一页)
- page_number = position[0]
- page = self.pdf_document[page_number]
- # 定义图片插入的位置和大小
-
- rect = fitz.Rect(int(position[1][2])+relative_pos[0],int(position[1][1])+relative_pos[1], int(position[1][2])+200+relative_pos[0], int(position[1][1])+200+relative_pos[1]) # (x0, y0, x1, y1)
- # 插入图片
- page.insert_image(rect, filename=image_path)
-
- #插入文字,文字和位置一一对应,如果文字只有一个,就各处相同
- def add_text_at_positions(self,texts=['text'],font_size = 24,skip = 0,positions = [(0,(0,0,0,0))],relative_pos = [-20,-20]):
- # 打开现有的PDF文件
- while positions[0][0]<skip:
- positions = positions[1:];
- if len(texts) == 1:
- texts = [texts[0]] * len(positions)
-
- for text,position in zip(texts,positions):
- page = self.pdf_document.load_page(position[0])
- # 定义文本、字体、大小和位置
- font_path = "C:/Windows/Fonts/simsun.ttc" # 替换为你的字体文件路径
- font_name = "SimSun" # 使用内置的Helvetica字体
- font_size = 24
- rect = [int(position[1][2])+relative_pos[0],int(position[1][1])+relative_pos[1]] # 文本矩形框的左下角坐标(x, y),单位:点(1点 = 1/72英寸)
- # 加载字体
- page.insert_font(fontname=font_name, fontfile=font_path)
- page.insert_text(rect, text, fontsize=font_size, fontname=font_name, color=(1, 0, 0)) # 重新插入文本框
- # 保存修改后的PDF文件
-
- def save_pdf(self,name_pdf_output):
- self.pdf_document.save(name_pdf_output,incremental=False);
- def add_text_in_pdf_where_text(self,texts=['2025'],font_size = 24,pdf_path = "ah.pdf",search_text = "年",skip = 0, relative_pos = [-20,-20]):
- positions = self.find_text_positions(search_text);
- self.add_text_at_positions(texts,font_size ,skip,positions ,relative_pos);
-
- def add_pic_in_pdf_where_text(self,stamp = 'sign(1).png',pdf_path = "ah.pdf",search_text = "指导教师签名",relative_pos = [-20,-100]):
- positions = self.find_text_positions(search_text)
- #self.add_stamp(pdf_path, stamp,positions,name_pdf_output)
- self.insert_pic_in_pdf(stamp,positions,relative_pos)
-
- if __name__ == '__main__':
- pe = pdfEditor( "ah.pdf");
- #pe.add_stamp_in_pdf_where_text(stamp = 'sign(1).png',pdf_path = "ah.pdf",search_text = "指导教师签名",name_pdf_output='output1.pdf');
- #pe.add_text(pdf_path,texts=['text'],positions = [(0,(0,0,0,0))],relative_pos = [-20,-20],name_pdf_output='o.pdf'):
- pe.add_text_in_pdf_where_text();
- pe.add_pic_in_pdf_where_text();
- pe.save_pdf('output667.pdf')
复制代码
|
|