简化打印代码

This commit is contained in:
胡尧
2025-04-28 19:12:08 +08:00
parent a856c5cbf7
commit 12c8641f2e

View File

@@ -58,56 +58,59 @@ class JikimoPrinting(models.AbstractModel):
打印PDF 打印PDF
""" """
_logger.info("PDF打印开始") _logger.info("PDF打印开始")
pdf_data_str = pdf_data.decode('ascii', errors='ignore')
decoded_data = base64.b64decode(pdf_data_str)
# 检查输入数据类型 # 检查输入数据类型
_logger.info(f"输入数据类型: {type(pdf_data)}") # _logger.info(f"输入数据类型: {type(pdf_data)}")
# 如果数据是bytes类型但看起来是base64编码先解码一次 # # 如果数据是bytes类型但看起来是base64编码先解码一次
if isinstance(pdf_data, bytes) and pdf_data[:10].decode('ascii', errors='ignore').isalnum(): # if isinstance(pdf_data, bytes) and pdf_data[:10].decode('ascii', errors='ignore').isalnum():
try: # try:
# 尝试将bytes转为字符串后解码 # # 尝试将bytes转为字符串后解码
pdf_data_str = pdf_data.decode('ascii', errors='ignore') # pdf_data_str = pdf_data.decode('ascii', errors='ignore')
decoded_data = base64.b64decode(pdf_data_str) # decoded_data = base64.b64decode(pdf_data_str)
_logger.info(f"对bytes类型的base64数据进行解码解码后前20字节: {decoded_data[:20]}") # _logger.info(f"对bytes类型的base64数据进行解码解码后前20字节: {decoded_data[:20]}")
# 检查是否是PDF格式 # # 检查是否是PDF格式
if decoded_data[:4] == b'%PDF': # if decoded_data[:4] == b'%PDF':
_logger.info("解码后得到PDF格式数据") # _logger.info("解码后得到PDF格式数据")
pdf_data = decoded_data # pdf_data = decoded_data
except Exception as e: # except Exception as e:
_logger.error(f"base64解码bytes数据失败: {str(e)}") # _logger.error(f"base64解码bytes数据失败: {str(e)}")
# 常规的数据处理 # # 常规的数据处理
if isinstance(pdf_data, str): # if isinstance(pdf_data, str):
_logger.info("输入数据是字符串类型") # _logger.info("输入数据是字符串类型")
try: # try:
decoded_data = base64.b64decode(pdf_data) # decoded_data = base64.b64decode(pdf_data)
_logger.info(f"成功解码base64数据解码后前20字节: {decoded_data[:20]}") # _logger.info(f"成功解码base64数据解码后前20字节: {decoded_data[:20]}")
except Exception as e: # except Exception as e:
_logger.error(f"base64解码失败: {str(e)}") # _logger.error(f"base64解码失败: {str(e)}")
decoded_data = pdf_data.encode() # decoded_data = pdf_data.encode()
else: # else:
_logger.info("处理bytes类型数据") # _logger.info("处理bytes类型数据")
decoded_data = pdf_data # decoded_data = pdf_data
# 检查解码后数据是否为PDF格式 # # 检查解码后数据是否为PDF格式
is_pdf = False # is_pdf = False
try: # try:
if decoded_data[:4] == b'%PDF': # if decoded_data[:4] == b'%PDF':
is_pdf = True # is_pdf = True
_logger.info("数据是PDF格式") # _logger.info("数据是PDF格式")
else: # else:
_logger.info(f"数据不是PDF格式前20字节: {decoded_data[:20]}") # _logger.info(f"数据不是PDF格式前20字节: {decoded_data[:20]}")
# 最后尝试直接以base64解码 # # 最后尝试直接以base64解码
try: # try:
final_try = base64.b64decode(decoded_data) # final_try = base64.b64decode(decoded_data)
if final_try[:4] == b'%PDF': # if final_try[:4] == b'%PDF':
_logger.info("最后尝试解码成功") # _logger.info("最后尝试解码成功")
decoded_data = final_try # decoded_data = final_try
is_pdf = True # is_pdf = True
except: # except:
_logger.info("最后尝试解码失败") # _logger.info("最后尝试解码失败")
except Exception as e: # except Exception as e:
_logger.error(f"检查PDF格式时出错: {str(e)}") # _logger.error(f"检查PDF格式时出错: {str(e)}")
# 处理二进制数据 # 处理二进制数据
pdf_buffer = BytesIO() pdf_buffer = BytesIO()
@@ -125,15 +128,15 @@ class JikimoPrinting(models.AbstractModel):
return return
# 使用正确的格式打印 # 使用正确的格式打印
# try: try:
# if is_pdf: if is_pdf:
# _logger.info("使用PDF格式打印") _logger.info("使用PDF格式打印")
# printer.print_document(report=None, content=pdf_content, doc_format='pdf') printer.print_document(report=None, content=pdf_content, doc_format='pdf')
# else: else:
# _logger.info("使用RAW格式打印") _logger.info("使用RAW格式打印")
# printer.print_document(report=None, content=pdf_content, doc_format='raw') printer.print_document(report=None, content=pdf_content, doc_format='raw')
# except Exception as e: except Exception as e:
# _logger.error(f"打印时出错: {str(e)}") _logger.error(f"打印时出错: {str(e)}")
# 清理资源 # 清理资源
pdf_buffer.close() pdf_buffer.close()