Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes#1407 : Implement different Font Size for different line in Backend #1433

Merged
merged 1 commit into from Jul 24, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
52 changes: 48 additions & 4 deletions api/controllers/generateBadges.py
Expand Up @@ -47,16 +47,60 @@ def generateBadges():
text_color = data.get('font_color') or '#ffffff'
paper_size = data.get('paper_size') or 'A3'
badge_size = data.get('badge_size') or '4x3'
font_size = data.get('font_size') or None
font_size_1 = data.get('font_size_1') or None
font_size_2 = data.get('font_size_2') or None
font_size_3 = data.get('font_size_3') or None
font_size_4 = data.get('font_size_4') or None
font_size_5 = data.get('font_size_5') or None
font_choice = data.get('font_type') or None

svg2png = SVG2PNG()

if config.ENV == 'PROD':
svg2png.do_text_fill(
os.getcwd() + '/api/static/badges/8BadgesOnA3.svg', text_color, badge_size, paper_size)
os.getcwd() + '/api/static/badges/8BadgesOnA3.svg',
text_color,
badge_size,
paper_size)

svg2png.change_font_size(
os.getcwd() + '/api/static/badges/8BadgesOnA3.svg',
badge_size,
paper_size,
font_size_1,
font_size_2,
font_size_3,
font_size_4,
font_size_5)
else:
svg2png.do_text_fill('static/badges/8BadgesOnA3.svg', text_color, badge_size, paper_size)
svg2png.do_text_fill(
'static/badges/8BadgesOnA3.svg',
text_color,
badge_size,
paper_size)

svg2png.change_font_size(
'static/badges/8BadgesOnA3.svg',
badge_size,
paper_size,
font_size_1,
font_size_2,
font_size_3,
font_size_4,
font_size_5)

merge_badges = MergeBadges(
image_name, csv_name, paper_size, badge_size, font_size, font_choice)
image_name,
csv_name,
paper_size,
badge_size,
font_choice,
font_size_1,
font_size_2,
font_size_3,
font_size_4,
font_size_5)

merge_badges.merge_pdfs()

uid = data.get('uid')
Expand Down
15 changes: 11 additions & 4 deletions api/utils/generate_badges.py
Expand Up @@ -8,7 +8,17 @@


class GenerateBadges:
def __init__(self, image_name, csv_name, paper_dimen, badge_size, font_size, font_choice):
def __init__(self,
image_name,
csv_name,
paper_dimen,
badge_size,
font_choice,
font_size_1,
font_size_2,
font_size_3,
font_size_4,
font_size_5):
self.APP_ROOT = app.config.get('BASE_DIR')
self.image_name = image_name
self.image = os.path.join(app.config.get('BASE_DIR'), 'static', 'uploads', 'image', image_name)
Expand All @@ -25,7 +35,6 @@ def __init__(self, image_name, csv_name, paper_dimen, badge_size, font_size, fon
self.NUMBER_OF_BADGES_PER_PAGE = 6
self.svgPath = 'static/badges/' + badge_size + 'onA4.svg'
self.wrap = True
self.font_size = font_size
self.font_choice = font_choice
with open(os.path.join(self.APP_ROOT, self.svgPath), encoding="UTF-8") as f:
self.CONTENT = f.read()
Expand Down Expand Up @@ -62,8 +71,6 @@ def generate_badges(self, rows, index):
content = content.replace("inkscape-font-specification:sans-serif", "inkscape-font-specification:" + self.font_choice)
content = content.replace("font-family:ubuntu", "font-family:" + self.font_choice)
content = content.replace("inkscape-font-specification:ubuntu", "inkscape-font-specification:" + self.font_choice)
if self.font_size:
content = content.replace("font-size:31.25px", "font-size:" + str(self.font_size) + "px")
for i, row in enumerate(rows):
row = [entry for entry in row if not entry.isspace()]
if len(row) == 0:
Expand Down
23 changes: 21 additions & 2 deletions api/utils/merge_badges.py
Expand Up @@ -6,9 +6,28 @@


class MergeBadges:
def __init__(self, image_name, csv_name, paper_size, badge_size, font_size, font_choice):
def __init__(self,
image_name,
csv_name,
paper_size,
badge_size,
font_choice,
font_size_1,
font_size_2,
font_size_3,
font_size_4,
font_size_5):
self.APP_ROOT = app.config.get('BASE_DIR')
self.badge_generator = GenerateBadges(image_name, csv_name, paper_size, badge_size, font_size, font_choice)
self.badge_generator = GenerateBadges(image_name,
csv_name,
paper_size,
badge_size,
font_size_1,
font_size_2,
font_size_3,
font_size_4,
font_size_5,
font_choice)
self.badge_generator.run_generator()
self.folder = os.path.join(self.APP_ROOT, 'static', 'temporary', os.path.splitext(image_name)[0])

Expand Down
63 changes: 63 additions & 0 deletions api/utils/svg_to_png.py
Expand Up @@ -14,49 +14,111 @@ def __init__(self):
self.ids = ['text4611', 'text4585', 'text4559', 'text4533', 'text4399', 'text4373', 'text4347', 'text4313']

def do_text_fill(self, filename, fill, badge_size, paper_size):

"""
Module to change color of badge's details
:param `filename` - svg file to modify.
:param `fill` - color to be applied on text
"""

dimensions = badge_config[paper_size][badge_size]
filename = 'static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg'
tree = etree.parse(open(os.path.join(self.APP_ROOT, filename), 'r'))
element = tree.getroot()

for idx in range(1, dimensions.badges + 1):

for row in range(1, 6):
_id = 'Person_color_{}_{}'.format(idx, row)
path = element.xpath(("//*[@id='{}']").format(_id))[0]
style_detail = path.get("style")
style_detail = style_detail.split(";")

if style_detail[7].split(':')[0] == 'fill':
style_detail[7] = "fill:" + str(fill)
print(style_detail[7])

elif style_detail[6].split(':')[0] == 'fill':
style_detail[6] = "fill:" + str(fill)
print(style_detail[6])

else:
for ind, i in enumerate(style_detail):
if i.split(':')[0] == 'fill':
style_detail[ind] = "fill:" + str(fill)
style_detail = ';'.join(style_detail)
text_nodes = path.getchildren()
path.set("style", style_detail)

for t in text_nodes:
text_style_detail = t.get("style")
text_style_detail = text_style_detail.split(";")
text_style_detail[-1] = "fill:" + str(fill)
text_style_detail = ";".join(text_style_detail)
t.set("style", text_style_detail)

etree.ElementTree(element).write(filename, pretty_print=True)
print("Text Fill saved!")

def change_font_size(self,
filename,
badge_size,
paper_size,
font_size_1,
font_size_2,
font_size_3,
font_size_4,
font_size_5):

"""
Module to change size of each badge lines
:param `filename` - svg file to modify.
:param `font_size_1` - Size to be applied on first line
:param `font_size_2` - Size to be applied on Second line
:param `font_size_3` - Size to be applied on Third line
:param `font_size_4` - Size to be applied on Fourth line
:param `font_size_5` - Size to be applied on Fifth line
"""

font_size = [1, font_size_1, font_size_2, font_size_3, font_size_4, font_size_5]
dimensions = badge_config[paper_size][badge_size]
filename = 'static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg'
tree = etree.parse(open(os.path.join(self.APP_ROOT, filename), 'r'))
element = tree.getroot()

for idx in range(1, dimensions.badges + 1):

for row in range(1, 6):
_id = 'Person_color_{}_{}'.format(idx, row)
path = element.xpath(("//*[@id='{}']").format(_id))[0]
style_detail = path.get("style")
style_detail = style_detail.split(";")

for ind, i in enumerate(style_detail):
if i.split(':')[0] == 'font-size':
style_detail[ind] = "font-size:" + font_size[row]
style_detail = ';'.join(style_detail)
text_nodes = path.getchildren()
path.set("font-size", style_detail)

for t in text_nodes:
text_style_detail = t.get("style")
text_style_detail = text_style_detail.split(";")
text_style_detail[-1] = "font-size:" + font_size[row]
text_style_detail = ";".join(text_style_detail)
t.set("style", text_style_detail)

etree.ElementTree(element).write(filename, pretty_print=True)
print("Font Size Saved!")

def do_svg2png(self, opacity, fill):

"""
Module to convert svg to png
:param `opacity` - Opacity for the output
:param `fill` - Background fill for the output
"""

filename = os.path.join(self.APP_ROOT, 'svg', 'user_defined.svg')
tree = parse(open(filename, 'r'))
element = tree.getroot()
Expand All @@ -75,4 +137,5 @@ def do_svg2png(self, opacity, fill):
print("done")
png_name = os.path.join(self.APP_ROOT, 'static', 'uploads', 'image', str(uuid.uuid4())) + ".png"
svg2png(url=filename, write_to=png_name)

return png_name