Merge branch 'develop' into release/release_2.12
This commit is contained in:
@@ -129,23 +129,23 @@ class PrintingUtils(models.AbstractModel):
|
|||||||
output_temp_path = '/tmp/output_temp.pdf'
|
output_temp_path = '/tmp/output_temp.pdf'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# 使用reportlab创建一个新的PDF
|
||||||
|
|
||||||
|
|
||||||
# 注册中文字体
|
# 注册中文字体
|
||||||
font_paths = [
|
font_paths = [
|
||||||
"c:/windows/fonts/simsun.ttc", # Windows系统宋体
|
|
||||||
"/usr/share/fonts/windows/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/droid/DroidSansFallbackFull.ttf", # Linux Droid字体
|
||||||
"/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc", # 文泉驿正黑
|
"/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc", # 文泉驿正黑
|
||||||
"/usr/share/fonts/chinese/TrueType/simsun.ttc", # 某些Linux发行版位置
|
"/usr/share/fonts/chinese/TrueType/simsun.ttc", # 某些Linux发行版位置
|
||||||
"/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc", # Noto Sans CJK
|
|
||||||
]
|
]
|
||||||
|
|
||||||
font_found = False
|
font_found = False
|
||||||
for font_path in font_paths:
|
for font_path in font_paths:
|
||||||
if os.path.exists(font_path):
|
if os.path.exists(font_path):
|
||||||
try:
|
try:
|
||||||
# 注册两个字体,一个用于中文,一个用于数字
|
|
||||||
pdfmetrics.registerFont(TTFont('SimSun', font_path))
|
pdfmetrics.registerFont(TTFont('SimSun', font_path))
|
||||||
pdfmetrics.registerFont(TTFont('Arial', 'c:/windows/fonts/arial.ttf'))
|
|
||||||
font_found = True
|
font_found = True
|
||||||
break
|
break
|
||||||
except:
|
except:
|
||||||
@@ -167,7 +167,7 @@ class PrintingUtils(models.AbstractModel):
|
|||||||
|
|
||||||
# 设置字体
|
# 设置字体
|
||||||
if font_found:
|
if font_found:
|
||||||
c.setFont('SimSun', 10) # 用于中文文本
|
c.setFont('SimSun', 10) # 增大字体大小到14pt
|
||||||
else:
|
else:
|
||||||
# 如果没有找到中文字体,使用默认字体
|
# 如果没有找到中文字体,使用默认字体
|
||||||
c.setFont('Helvetica', 10)
|
c.setFont('Helvetica', 10)
|
||||||
@@ -181,23 +181,11 @@ class PrintingUtils(models.AbstractModel):
|
|||||||
|
|
||||||
if buttom_text:
|
if buttom_text:
|
||||||
# 在二维码下方绘制文字
|
# 在二维码下方绘制文字
|
||||||
# 分离中文和数字
|
text = buttom_text
|
||||||
import re
|
text_width = c.stringWidth(text, "SimSun" if font_found else "Helvetica", 10) # 准确计算文字宽度
|
||||||
text_parts = re.split('(\d+)', buttom_text)
|
text_x = page_width - qr_size - margin + (qr_size - text_width) / 2 # 文字居中对齐
|
||||||
text_x = page_width - qr_size - margin + (qr_size - c.stringWidth(buttom_text, "SimSun", 10)) / 2
|
text_y = margin + 20 # 文字位置靠近底部
|
||||||
text_y = margin + 20
|
c.drawString(text_x, text_y, text)
|
||||||
|
|
||||||
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()
|
c.save()
|
||||||
|
|
||||||
@@ -230,3 +218,4 @@ class PrintingUtils(models.AbstractModel):
|
|||||||
os.remove(qr_temp_path)
|
os.remove(qr_temp_path)
|
||||||
if os.path.exists(output_temp_path):
|
if os.path.exists(output_temp_path):
|
||||||
os.remove(output_temp_path)
|
os.remove(output_temp_path)
|
||||||
|
os.remove(output_temp_path)
|
||||||
Reference in New Issue
Block a user