From 644ff967e57152d718949311a98fd30ac4d9d7bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Sun, 27 Apr 2025 14:10:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3pdf=E4=B8=8A=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E4=B9=B1=E7=A0=81=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/mrp_production.py | 3 +- sf_base/commons/common.py | 32 +++++++++++++------ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/jikimo_purchase_request/models/mrp_production.py b/jikimo_purchase_request/models/mrp_production.py index 50fe65c0..dd9d4aa9 100644 --- a/jikimo_purchase_request/models/mrp_production.py +++ b/jikimo_purchase_request/models/mrp_production.py @@ -9,7 +9,8 @@ class MrpProduction(models.Model): @api.depends('state') def _compute_pr_mp_count(self): for item in self: - pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', item.name), ('is_subcontract', '!=', 'True')]) + pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', item.name)]) + # pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', item.name), ('is_subcontract', '!=', 'True')]) if pr_ids: item.pr_mp_count = len(pr_ids) else: diff --git a/sf_base/commons/common.py b/sf_base/commons/common.py index 30c06b6d..5190772f 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) # 增大字体大小到14pt + c.setFont('SimSun', 10) # 用于中文文本 else: # 如果没有找到中文字体,使用默认字体 c.setFont('Helvetica', 10) @@ -181,11 +181,23 @@ class PrintingUtils(models.AbstractModel): if buttom_text: # 在二维码下方绘制文字 - 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) + # 分离中文和数字 + 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) c.save()