78 lines
2.8 KiB
Python
78 lines
2.8 KiB
Python
from api.Generateur import Generateur
|
|
from fontTools.ttLib import TTFont
|
|
from fontTools.ttLib.tables._c_m_a_p import CmapSubtable
|
|
|
|
|
|
def pdf_settings(path, police, number_in_serie, number_exo, start_index, consigne):
|
|
size = {
|
|
'10': 94,
|
|
'12': 78,
|
|
'14': 67,
|
|
'16': 59,
|
|
'18': 52
|
|
}
|
|
font = TTFont(
|
|
'/usr/share/fonts/truetype/liberation/LiberationSerif-Regular.ttf')
|
|
|
|
cmap = font['cmap']
|
|
t = cmap.getcmap(3, 1).cmap
|
|
s = font.getGlyphSet()
|
|
units_per_em = font['head'].unitsPerEm
|
|
|
|
def getTextWidth(text, pointSize):
|
|
total = 0
|
|
for c in text:
|
|
if ord(c) in t and t[ord(c)] in s:
|
|
total += s[t[ord(c)]].width
|
|
else:
|
|
total += s['.notdef'].width
|
|
total = total*float(pointSize)/units_per_em
|
|
return total
|
|
exemple_exo = sorted(Generateur(path, 5, 'pdf'),
|
|
key=len, reverse=True)
|
|
|
|
margin = 1.5
|
|
column_sep = 30 * 2.54 / 72
|
|
page_width = 21 - 2 * margin
|
|
columns = int(
|
|
page_width / (int(getTextWidth(exemple_exo[0]['calcul'], 12)*2.54/72) + 1))
|
|
if columns * (getTextWidth(exemple_exo[0]['calcul'], 12)*2.54/72) + columns * column_sep + columns * (15*2.54/72) > page_width:
|
|
columns -= 2
|
|
columns -= 2
|
|
exo_list = []
|
|
exos = Generateur(path, number_in_serie, 'pdf')
|
|
return {'columns': columns, 'exos': exos, 'consigne': consigne, 'correction': exos[0]['correction'] != None}
|
|
|
|
|
|
def page_settings(exos):
|
|
# print(exos)
|
|
max = 100
|
|
total = 10 + 3 + 8
|
|
pages = [{'exos': [], 'index': 1, 'jump': 0}]
|
|
page_num = 0
|
|
for ex in list(map(lambda e: e['exos'], exos)):
|
|
#print(ex)
|
|
for e in ex:
|
|
if (total) + (len(e['exercice'][0])) <= max:
|
|
#print(total + len(e['exercice'][0]) + 2,
|
|
#total + len(e['exercice'][0]) + 2 < max, e['index'])
|
|
total += (len(e['exercice'][0]) * 2 * 2) + 4 + 3
|
|
e['notLast'] = True
|
|
pages[page_num]['exos'].append(e)
|
|
else:
|
|
pages[page_num]['exos'][len(
|
|
pages[page_num]['exos']) - 1]['notLast'] = False
|
|
rest = max - (total - 1)
|
|
pages[page_num]['jump'] = rest
|
|
#print('tot', pages[page_num]['jump'])
|
|
id = pages[page_num]['index']
|
|
page_num += 1
|
|
pages.append({'exos': [], 'index': id + 1, 'jump': 0})
|
|
pages[page_num]['exos'].append(e)
|
|
total = (len(e['exercice'][0]) * 2 * 2) + 4 + 10 + 3 + 3 + 8
|
|
#print('pgages', len(pages))
|
|
pages[len(pages) - 1]['exos'][len(pages[len(pages) - 1]
|
|
['exos']) - 1]['notLast'] = False
|
|
#print(list(map(lambda e:e['exos'],exos)))
|
|
return pages
|