diff --git a/sf_base/commons/common.py b/sf_base/commons/common.py index 2dbb4795..579125f0 100644 --- a/sf_base/commons/common.py +++ b/sf_base/commons/common.py @@ -103,12 +103,19 @@ class PrintingUtils(models.AbstractModel): self.send_to_printer(host, port, zpl_code) - def add_qr_code_to_pdf(self, pdf_path:str, content:str, buttom_text:Optional[str]=False): + def add_qr_code_to_pdf( + self, + pdf_path:str, + content:str, + qr_code_buttom_text:Optional[str]=False, + buttom_text:Optional[str]=False, + ): """ 在PDF文件中添加二维码 :param pdf_path: PDF文件路径 :param content: 二维码内容 - :param buttom_text: 二维码下方文字 + :param qr_code_buttom_text: 二维码下方文字 + :param buttom_text: 正文下方文字 :return: 是否成功 """ if not os.path.exists(pdf_path): @@ -156,8 +163,9 @@ class PrintingUtils(models.AbstractModel): existing_pdf = PdfFileReader(original_file) output = PdfFileWriter() - # 处理第一页 - page = existing_pdf.getPage(0) + # 处理最后一页 + last_page = existing_pdf.getNumPages() - 1 + page = existing_pdf.getPage(last_page) # 获取页面尺寸 page_width = float(page.mediaBox.getWidth()) page_height = float(page.mediaBox.getHeight()) @@ -179,13 +187,21 @@ class PrintingUtils(models.AbstractModel): qr_y = margin + 20 # 将二维码向上移动一点,为文字留出空间 c.drawImage(qr_temp_path, page_width - qr_size - margin, qr_y, width=qr_size, height=qr_size) - if buttom_text: + if qr_code_buttom_text: # 在二维码下方绘制文字 - text = buttom_text + text = qr_code_buttom_text text_width = c.stringWidth(text, "SimSun" if font_found else "Helvetica", 10) # 准确计算文字宽度 text_x = page_width - qr_size - margin + (qr_size - text_width) / 2 # 文字居中对齐 text_y = margin + 20 # 文字位置靠近底部 c.drawString(text_x, text_y, text) + + if buttom_text: + # 在下方中间添加文字 + text = button_text + text_width = c.stringWidth(text, "SimSun" if font_found else "Helvetica", 10) # 准确计算文字宽度 + text_x = (page_width - text_width) / 2 # 文字居中对齐 + text_y = margin + 20 # 文字位置靠近底部 + c.drawString(text_x, text_y, text) c.save() @@ -196,11 +212,12 @@ class PrintingUtils(models.AbstractModel): # 合并原始页面和二维码页面 page.mergePage(qr_page) - output.addPage(page) # 添加剩余的页面 - for i in range(1, existing_pdf.getNumPages()): + for i in range(0, last_page): output.addPage(existing_pdf.getPage(i)) + + output.addPage(page) # 保存最终的PDF到一个临时文件 final_temp_path = pdf_path + '.tmp'