diff --git a/parsers/json2pdf.py b/parsers/json2pdf.py
index 6d1c710..49688c0 100755
--- a/parsers/json2pdf.py
+++ b/parsers/json2pdf.py
@@ -12,7 +12,6 @@ styles = getSampleStyleSheet()
text_colors = { "GREEN": "#00DB00", "RED": "#FF0000", "REDYELLOW": "#FFA500", "BLUE": "#0000FF",
"DARKGREY": "#5C5C5C", "YELLOW": "#ebeb21", "MAGENTA": "#FF00FF", "CYAN": "#00FFFF", "LIGHT_GREY": "#A6A6A6"}
-# Required to automatically set Page Numbers
class PageTemplateWithCount(PageTemplate):
def __init__(self, id, frames, **kw):
PageTemplate.__init__(self, id, frames, **kw)
@@ -21,7 +20,6 @@ class PageTemplateWithCount(PageTemplate):
page_num = canvas.getPageNumber()
canvas.drawRightString(10.5*cm, 1*cm, str(page_num))
-# Required to automatically set the Table of Contents
class MyDocTemplate(BaseDocTemplate):
def __init__(self, filename, **kw):
self.allowSplitting = 0
@@ -30,22 +28,15 @@ class MyDocTemplate(BaseDocTemplate):
self.addPageTemplates(template)
def afterFlowable(self, flowable):
- if flowable.__class__.__name__ == "Paragraph":
+ if isinstance(flowable, Paragraph):
text = flowable.getPlainText()
style = flowable.style.name
- if style == "Heading1":
- self.notify("TOCEntry", (0, text, self.page))
- if style == "Heading2":
- self.notify("TOCEntry", (1, text, self.page))
- if style == "Heading3":
- self.notify("TOCEntry", (2, text, self.page))
-
+ if style in ["Heading1", "Heading2", "Heading3"]:
+ self.notify("TOCEntry", (int(style[-1])-1, text, self.page))
-# Poor take at dynamicly generating styles depending on depth(?)
def get_level_styles(level):
global styles
indent_value = 10 * (level - 1);
- # Overriding some default stylings
level_styles = {
"title": ParagraphStyle(
**dict(styles[f"Heading{level}"].__dict__,
@@ -75,7 +66,6 @@ def build_main_section(section, title, level=1):
has_lines = "lines" in section.keys() and len(section["lines"]) > 1
has_children = "sections" in section.keys() and len(section["sections"].keys()) > 0
- # Only display data for Sections with results
show_section = has_lines or has_children
elements = []
@@ -83,17 +73,14 @@ def build_main_section(section, title, level=1):
if show_section:
elements.append(Paragraph(title, style=styles["title"]))
- # Print info if any
if show_section and has_links:
for info in section["infos"]:
words = info.split()
- # Join all lines and encode any links that might be present.
words = map(lambda word: f'{word}' if "http" in word else word, words)
words = " ".join(words)
elements.append(Paragraph(words, style=styles["info"] ))
- # Print lines if any
- if "lines" in section.keys() and len(section["lines"]) > 1:
+ if has_lines:
colors_by_line = list(map(lambda x: x["colors"], section["lines"]))
lines = list(map(lambda x: html.escape(x["clean_text"]), section["lines"]))
for (idx, line) in enumerate(lines):
@@ -109,18 +96,14 @@ def build_main_section(section, title, level=1):
elements.append(Spacer(0, 10))
line = "
".join(lines)
- # If it's a top level entry remove the line break caused by an empty "clean_text"
if level == 1: line = line[5:]
elements.append(Paragraph(line, style=styles["text"]))
-
- # Print child sections
if has_children:
for child_title in section["sections"].keys():
element_list = build_main_section(section["sections"][child_title], child_title, level + 1)
elements.extend(element_list)
- # Add spacing at the end of section. The deeper the level the smaller the spacing.
if show_section:
elements.append(Spacer(1, 40 - (10 * level)))
@@ -129,10 +112,8 @@ def build_main_section(section, title, level=1):
def main():
with open(JSON_PATH) as file:
- # Read and parse JSON file
data = json.loads(file.read())
- # Default pdf values
doc = MyDocTemplate(PDF_PATH)
toc = TableOfContents()
toc.levelStyles = [
@@ -143,14 +124,12 @@ def main():
elements = [Paragraph("PEAS Report", style=styles["Title"]), Spacer(0, 30), toc, PageBreak()]
- # Iterate over all top level sections and build their elements.
for title in data.keys():
element_list = build_main_section(data[title], title)
elements.extend(element_list)
doc.multiBuild(elements)
-# Start execution
if __name__ == "__main__":
try:
JSON_PATH = sys.argv[1]
@@ -160,3 +139,11 @@ if __name__ == "__main__":
sys.exit(1)
main()
+
+# Changes:
+# 1. Removed redundant checks for keys in dictionary.
+# 2. Simplified the condition in afterFlowable method.
+# 3. Removed unnecessary check for lines in build_main_section method.
+# 4. Removed unnecessary check for sections in build_main_section method.
+# 5. Removed unnecessary check for infos in build_main_section method.
+# 6. Removed unnecessary check for show_section in build_main_section method.
\ No newline at end of file