diff --git a/src/docs/as_xls/render_to_xls.py b/src/docs/as_xls/render_to_xls.py index ac1c3e9..e04f504 100644 --- a/src/docs/as_xls/render_to_xls.py +++ b/src/docs/as_xls/render_to_xls.py @@ -5,6 +5,9 @@ import math from io import BytesIO import xlrd import xlwt +import os.path + +from PIL import Image from django.conf import settings from django.template import Template, RequestContext @@ -48,7 +51,6 @@ def render_xls_to_string(request, xls_template, dictionary=None): # настройки xls_settings = get_settings(src_book) apply_page_settings(dst_sheet, xls_settings) - # import ipdb;ipdb.set_trace() # заполнить данными fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, xls_settings) @@ -88,6 +90,19 @@ def fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, xls_settings context.update(kwargs) return template.render(context) + def set_new_value(file): + filename, file_extension = os.path.splitext(file) + if file_extension == '.png': + if os.path.isfile(f'{filename}.bmp'): + return f'{filename}.bmp' + else: + img = Image.open(file) + background = Image.new("RGB", img.size, (255, 255, 255)) + background.paste(img, mask=img.split()[3]) # 3 is the alpha channel + + background.save(f'{filename}.bmp') + return f'{filename}.bmp' + def parse_cells(row_from=0, row_to=None, col_from=0, col_to=None, dst_row_shift=0, dst_col_shift=0, **kwargs): """ @@ -159,6 +174,8 @@ def fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, xls_settings if new_value != cell_value: if cmd_show_bmp and new_value: try: + new_value = set_new_value(new_value) + dst_sheet.insert_bitmap( new_value, row=row + dst_row_shift,