From 72415d633ca090bed67e78b49ce948cc222f5e2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Sun, 27 Apr 2025 14:36:13 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=80=E5=9B=9E=E5=AD=97=E4=BD=93=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/commons/common.py | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/sf_base/commons/common.py b/sf_base/commons/common.py index 5190772f..aa27c46f 100644 --- a/sf_base/commons/common.py +++ b/sf_base/commons/common.py @@ -129,23 +129,23 @@ class PrintingUtils(models.AbstractModel): output_temp_path = '/tmp/output_temp.pdf' try: + # 使用reportlab创建一个新的PDF + + # 注册中文字体 font_paths = [ - "c:/windows/fonts/simsun.ttc", # Windows系统宋体 "/usr/share/fonts/windows/simsun.ttc", # Windows系统宋体 + "c:/windows/fonts/simsun.ttc", # Windows系统宋体另一个位置 "/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf", # Linux Droid字体 "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc", # 文泉驿正黑 "/usr/share/fonts/chinese/TrueType/simsun.ttc", # 某些Linux发行版位置 - "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc", # Noto Sans CJK ] font_found = False for font_path in font_paths: if os.path.exists(font_path): try: - # 注册两个字体,一个用于中文,一个用于数字 pdfmetrics.registerFont(TTFont('SimSun', font_path)) - pdfmetrics.registerFont(TTFont('Arial', 'c:/windows/fonts/arial.ttf')) font_found = True break except: @@ -167,7 +167,7 @@ class PrintingUtils(models.AbstractModel): # 设置字体 if font_found: - c.setFont('SimSun', 10) # 用于中文文本 + c.setFont('SimSun', 10) # 增大字体大小到14pt else: # 如果没有找到中文字体,使用默认字体 c.setFont('Helvetica', 10) @@ -181,23 +181,11 @@ class PrintingUtils(models.AbstractModel): if buttom_text: # 在二维码下方绘制文字 - # 分离中文和数字 - import re - text_parts = re.split('(\d+)', buttom_text) - text_x = page_width - qr_size - margin + (qr_size - c.stringWidth(buttom_text, "SimSun", 10)) / 2 - text_y = margin + 20 - - current_x = text_x - for part in text_parts: - if part: # 跳过空字符串 - if part.isdigit(): - c.setFont('Arial', 10) # 数字使用Arial字体 - current_font = 'Arial' - else: - c.setFont('SimSun', 10) # 中文使用宋体 - current_font = 'SimSun' - c.drawString(current_x, text_y, part) - current_x += c.stringWidth(part, current_font, 10) + text = 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) c.save() @@ -229,4 +217,5 @@ class PrintingUtils(models.AbstractModel): if os.path.exists(qr_temp_path): os.remove(qr_temp_path) if os.path.exists(output_temp_path): + os.remove(output_temp_path) os.remove(output_temp_path) \ No newline at end of file