add png=>bmp in excel

prod
Dmitriy Shesterkin 9 years ago
parent 71c2309e1a
commit 9d42209cf0
  1. 19
      src/docs/as_xls/render_to_xls.py

@ -5,6 +5,9 @@ import math
from io import BytesIO from io import BytesIO
import xlrd import xlrd
import xlwt import xlwt
import os.path
from PIL import Image
from django.conf import settings from django.conf import settings
from django.template import Template, RequestContext 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) xls_settings = get_settings(src_book)
apply_page_settings(dst_sheet, xls_settings) apply_page_settings(dst_sheet, xls_settings)
# import ipdb;ipdb.set_trace()
# заполнить данными # заполнить данными
fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, xls_settings) 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) context.update(kwargs)
return template.render(context) 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, def parse_cells(row_from=0, row_to=None, col_from=0, col_to=None,
dst_row_shift=0, dst_col_shift=0, **kwargs): 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 new_value != cell_value:
if cmd_show_bmp and new_value: if cmd_show_bmp and new_value:
try: try:
new_value = set_new_value(new_value)
dst_sheet.insert_bitmap( dst_sheet.insert_bitmap(
new_value, new_value,
row=row + dst_row_shift, row=row + dst_row_shift,

Loading…
Cancel
Save