Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb7ff241f5 |
@@ -9,6 +9,11 @@ from odoo import http
|
|||||||
from reportlab.pdfgen import canvas
|
from reportlab.pdfgen import canvas
|
||||||
from reportlab.lib.utils import ImageReader
|
from reportlab.lib.utils import ImageReader
|
||||||
from reportlab.lib.pagesizes import letter, A4
|
from reportlab.lib.pagesizes import letter, A4
|
||||||
|
try:
|
||||||
|
from pillow_heif import register_heif_opener
|
||||||
|
register_heif_opener()
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -50,14 +55,25 @@ class Extension(main.ReportController):
|
|||||||
except PyPDF2.utils.PdfReadError: # Case of non-pdf attachments
|
except PyPDF2.utils.PdfReadError: # Case of non-pdf attachments
|
||||||
logger.info('Attachment %s cannot be merged in expense report'%(att.name,))
|
logger.info('Attachment %s cannot be merged in expense report'%(att.name,))
|
||||||
elif 'image/' in att.mimetype:
|
elif 'image/' in att.mimetype:
|
||||||
packet = io.BytesIO()
|
try:
|
||||||
can = canvas.Canvas(packet)
|
from PIL import Image as PilImage
|
||||||
img = ImageReader(io.BytesIO(base64.b64decode(att.datas)))
|
raw = base64.b64decode(att.datas)
|
||||||
can.drawImage(img, 0, 0, A4[0]*0.9, A4[1]*0.9, preserveAspectRatio=True)
|
pil_img = PilImage.open(io.BytesIO(raw))
|
||||||
can.save()
|
if pil_img.mode not in ('RGB', 'RGBA'):
|
||||||
packet.seek(0)
|
pil_img = pil_img.convert('RGB')
|
||||||
attachment_reader = OdooPdfFileReader(packet)
|
jpeg_buffer = io.BytesIO()
|
||||||
writer.addPage(attachment_reader.getPage(0))
|
pil_img.save(jpeg_buffer, format='JPEG')
|
||||||
|
jpeg_buffer.seek(0)
|
||||||
|
packet = io.BytesIO()
|
||||||
|
can = canvas.Canvas(packet)
|
||||||
|
img = ImageReader(jpeg_buffer)
|
||||||
|
can.drawImage(img, 0, 0, A4[0]*0.9, A4[1]*0.9, preserveAspectRatio=True)
|
||||||
|
can.save()
|
||||||
|
packet.seek(0)
|
||||||
|
attachment_reader = OdooPdfFileReader(packet)
|
||||||
|
writer.addPage(attachment_reader.getPage(0))
|
||||||
|
except Exception:
|
||||||
|
logger.info('Attachment %s cannot be merged in expense report', att.name)
|
||||||
|
|
||||||
# Write new pdf to res.data
|
# Write new pdf to res.data
|
||||||
buffer = io.BytesIO()
|
buffer = io.BytesIO()
|
||||||
@@ -66,4 +82,4 @@ class Extension(main.ReportController):
|
|||||||
|
|
||||||
res.data = pdf_content
|
res.data = pdf_content
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|||||||
Reference in New Issue
Block a user