Spaces:
Running
Running
Update pdf_generator.py
Browse files- pdf_generator.py +6 -12
pdf_generator.py
CHANGED
@@ -40,12 +40,12 @@ class SliderFlowable(Flowable):
|
|
40 |
# Add range labels
|
41 |
min_str = self.format_label(self.min_val)
|
42 |
max_str = self.format_label(self.max_val)
|
43 |
-
drawing.add(String(40,
|
44 |
-
drawing.add(String(340,
|
45 |
|
46 |
# Add value label
|
47 |
value_str = self.format_label(self.value)
|
48 |
-
drawing.add(String(value_width - 20,
|
49 |
|
50 |
# Add value marker
|
51 |
drawing.add(Line(value_width, 25, value_width, 55, strokeColor=colors.HexColor("#26004d"), strokeWidth=2))
|
@@ -54,17 +54,12 @@ class SliderFlowable(Flowable):
|
|
54 |
|
55 |
def format_label(self, value):
|
56 |
if self.is_percentage:
|
57 |
-
return f"{value}%"
|
58 |
elif self.is_integer:
|
59 |
return f"{int(value)}"
|
60 |
else:
|
61 |
return f"{value:.2f}"
|
62 |
|
63 |
-
def format_value(self, value):
|
64 |
-
if self.is_percentage:
|
65 |
-
return value / 100 # Convert percentage back to decimal for calculations
|
66 |
-
return value
|
67 |
-
|
68 |
def create_styles():
|
69 |
styles = getSampleStyleSheet()
|
70 |
styles['Title'].fontName = 'Helvetica-Bold'
|
@@ -166,7 +161,6 @@ def process_quantitative_criteria(answers, styles):
|
|
166 |
return story
|
167 |
|
168 |
def parse_quantitative_criteria(input_string):
|
169 |
-
# Match "Text [min-max]" format, where min and max can be int, float, or percentage
|
170 |
match = re.match(r'(.+?)\s*\[([-+]?(?:\d*\.*\d+)(?:%)?)\s*-\s*([-+]?(?:\d*\.*\d+)(?:%)?)\]', input_string)
|
171 |
if match:
|
172 |
name, min_val, max_val = match.groups()
|
@@ -174,7 +168,7 @@ def parse_quantitative_criteria(input_string):
|
|
174 |
|
175 |
def parse_value(val):
|
176 |
if '%' in val:
|
177 |
-
return float(val.rstrip('%'))
|
178 |
elif '.' in val:
|
179 |
return float(val), False
|
180 |
else:
|
@@ -184,7 +178,7 @@ def parse_quantitative_criteria(input_string):
|
|
184 |
max_val, is_max_percent = parse_value(max_val)
|
185 |
|
186 |
is_percentage = is_min_percent or is_max_percent
|
187 |
-
is_integer = isinstance(min_val, int) and isinstance(max_val, int)
|
188 |
|
189 |
return name, min_val, max_val, is_percentage, is_integer
|
190 |
return None
|
|
|
40 |
# Add range labels
|
41 |
min_str = self.format_label(self.min_val)
|
42 |
max_str = self.format_label(self.max_val)
|
43 |
+
drawing.add(String(40, 10, min_str, fontSize=10, fillColor=colors.HexColor("#26004d")))
|
44 |
+
drawing.add(String(340, 10, max_str, fontSize=10, fillColor=colors.HexColor("#26004d")))
|
45 |
|
46 |
# Add value label
|
47 |
value_str = self.format_label(self.value)
|
48 |
+
drawing.add(String(value_width - 20, 55, value_str, fontSize=10, fillColor=colors.HexColor("#26004d")))
|
49 |
|
50 |
# Add value marker
|
51 |
drawing.add(Line(value_width, 25, value_width, 55, strokeColor=colors.HexColor("#26004d"), strokeWidth=2))
|
|
|
54 |
|
55 |
def format_label(self, value):
|
56 |
if self.is_percentage:
|
57 |
+
return f"{value:.2f}%"
|
58 |
elif self.is_integer:
|
59 |
return f"{int(value)}"
|
60 |
else:
|
61 |
return f"{value:.2f}"
|
62 |
|
|
|
|
|
|
|
|
|
|
|
63 |
def create_styles():
|
64 |
styles = getSampleStyleSheet()
|
65 |
styles['Title'].fontName = 'Helvetica-Bold'
|
|
|
161 |
return story
|
162 |
|
163 |
def parse_quantitative_criteria(input_string):
|
|
|
164 |
match = re.match(r'(.+?)\s*\[([-+]?(?:\d*\.*\d+)(?:%)?)\s*-\s*([-+]?(?:\d*\.*\d+)(?:%)?)\]', input_string)
|
165 |
if match:
|
166 |
name, min_val, max_val = match.groups()
|
|
|
168 |
|
169 |
def parse_value(val):
|
170 |
if '%' in val:
|
171 |
+
return float(val.rstrip('%')), True
|
172 |
elif '.' in val:
|
173 |
return float(val), False
|
174 |
else:
|
|
|
178 |
max_val, is_max_percent = parse_value(max_val)
|
179 |
|
180 |
is_percentage = is_min_percent or is_max_percent
|
181 |
+
is_integer = isinstance(min_val, int) and isinstance(max_val, int) and not is_percentage
|
182 |
|
183 |
return name, min_val, max_val, is_percentage, is_integer
|
184 |
return None
|