Spaces:
Runtime error
Runtime error
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
|