增加向pdf中添加二维码的功能
This commit is contained in:
@@ -3,12 +3,9 @@ import logging
|
||||
import os
|
||||
import json
|
||||
import base64
|
||||
from qrcode.main import QRCode
|
||||
import PyPDF2
|
||||
from odoo import http, fields, models
|
||||
from odoo.http import request
|
||||
from odoo.addons.sf_base.controllers.controllers import MultiInheritController
|
||||
import qrcode
|
||||
|
||||
|
||||
|
||||
@@ -96,13 +93,12 @@ class Sf_Mrs_Connect(http.Controller, MultiInheritController):
|
||||
if file_extension.lower() == '.pdf':
|
||||
panel_file_path = os.path.join(program_path_tmp_panel, file)
|
||||
logging.info('panel_file_path:%s' % panel_file_path)
|
||||
|
||||
request.env['printing.utils'].add_qr_code_to_pdf(panel_file_path, model_id, "扫码获取工单")
|
||||
cnc_workorder.write({'cnc_worksheet': base64.b64encode(open(panel_file_path, 'rb').read())})
|
||||
pre_workorder = productions.workorder_ids.filtered(
|
||||
lambda ap: ap.routing_type in ['装夹预调', '人工线下加工'] and ap.state not in ['done', 'rework'
|
||||
'cancel'] and ap.processing_panel == panel)
|
||||
if pre_workorder:
|
||||
self._add_qr_code_to_pdf(panel_file_path, model_id)
|
||||
pre_workorder.write(
|
||||
{'processing_drawing': base64.b64encode(open(panel_file_path, 'rb').read())})
|
||||
productions.write({'programming_state': '已编程', 'work_state': '已编程'})
|
||||
@@ -279,66 +275,4 @@ class Sf_Mrs_Connect(http.Controller, MultiInheritController):
|
||||
return json.JSONEncoder().encode(res)
|
||||
|
||||
|
||||
def _add_qr_code_to_pdf(self, panel_file_path, model_id):
|
||||
if not os.path.exists(panel_file_path):
|
||||
logging.warning(f'文件不存在: {panel_file_path}')
|
||||
return False
|
||||
|
||||
# 生成二维码
|
||||
qr = qrcode.QRCode(version=1, box_size=10, border=5)
|
||||
qr.add_data(str(model_id))
|
||||
qr.make(fit=True)
|
||||
qr_img = qr.make_image(fill_color="black", back_color="white")
|
||||
|
||||
# 保存二维码为临时文件
|
||||
qr_temp_path = '/tmp/qr_temp.png'
|
||||
qr_img.save(qr_temp_path)
|
||||
|
||||
# 创建一个临时PDF文件路径
|
||||
output_temp_path = '/tmp/output_temp.pdf'
|
||||
|
||||
# 使用reportlab创建一个新的PDF
|
||||
from reportlab.pdfgen import canvas
|
||||
from reportlab.lib.units import inch
|
||||
from PyPDF2 import PdfFileReader, PdfFileWriter
|
||||
|
||||
# 读取原始PDF
|
||||
existing_pdf = PdfFileReader(open(panel_file_path, "rb"))
|
||||
output = PdfFileWriter()
|
||||
|
||||
# 处理第一页
|
||||
page = existing_pdf.getPage(0)
|
||||
# 获取页面尺寸
|
||||
page_width = float(page.mediaBox.getWidth())
|
||||
page_height = float(page.mediaBox.getHeight())
|
||||
|
||||
# 创建一个新的PDF页面用于放置二维码
|
||||
c = canvas.Canvas(output_temp_path, pagesize=(page_width, page_height))
|
||||
# 在右下角绘制二维码,预留边距
|
||||
qr_size = 1 * inch # 二维码大小为1英寸
|
||||
margin = 0.4 * inch # 边距为0.4英寸
|
||||
c.drawImage(qr_temp_path, page_width - qr_size - margin, margin, width=qr_size, height=qr_size)
|
||||
c.save()
|
||||
|
||||
# 读取带有二维码的临时PDF
|
||||
qr_pdf = PdfFileReader(open(output_temp_path, "rb"))
|
||||
qr_page = qr_pdf.getPage(0)
|
||||
|
||||
# 合并原始页面和二维码页面
|
||||
page.mergePage(qr_page)
|
||||
output.addPage(page)
|
||||
|
||||
# 添加剩余的页面
|
||||
for i in range(1, existing_pdf.getNumPages()):
|
||||
output.addPage(existing_pdf.getPage(i))
|
||||
|
||||
# 保存最终的PDF
|
||||
with open(panel_file_path, "wb") as output_file:
|
||||
output.write(output_file)
|
||||
|
||||
# 清理临时文件
|
||||
qr_pdf.close()
|
||||
os.remove(qr_temp_path)
|
||||
os.remove(output_temp_path)
|
||||
|
||||
return True
|
||||
|
||||
Reference in New Issue
Block a user