|
from reportlab.lib.pagesizes import A4 |
|
from reportlab.lib.styles import getSampleStyleSheet |
|
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer |
|
from reportlab.graphics.shapes import Drawing, Line |
|
import re |
|
|
|
def generate_pdf(data): |
|
"""Generate a PDF file from the json essay data""" |
|
title = re.sub(r'[^a-zA-Z0-9]', '_', data['header']) |
|
filename = title + '.pdf' |
|
pdf = SimpleDocTemplate(filename, pagesize=A4, title=title) |
|
|
|
styles = getSampleStyleSheet() |
|
story = [] |
|
line = Drawing(450, 1) |
|
line.add(Line(0, 0, 450, 0)) |
|
|
|
header = Paragraph(data['header'], styles['Title']) |
|
story.append(header) |
|
story.append(Spacer(1, 6)) |
|
|
|
entry = Paragraph(data['entry'], styles['BodyText']) |
|
story.append(entry) |
|
story.append(Spacer(1, 6)) |
|
|
|
for para in data['paragraphs']: |
|
sub_header = Paragraph(para['sub_header'], styles['Heading2']) |
|
paragraph = Paragraph(para['paragraph'], styles['BodyText']) |
|
|
|
story.append(sub_header) |
|
story.append(Spacer(1, 3)) |
|
story.append(paragraph) |
|
story.append(Spacer(1, 6)) |
|
|
|
conclusion_title = Paragraph('Conclusion', styles['Heading2']) |
|
conclusion = Paragraph(data['conclusion'], styles['BodyText']) |
|
story.append(conclusion_title) |
|
story.append(conclusion) |
|
story.append(Spacer(1, 6)) |
|
|
|
story.append(line) |
|
story.append(Spacer(1, 3)) |
|
seo_keywords = Paragraph("Seo Keywords: "+", ".join( data['seo_keywords']), styles['BodyText']) |
|
story.append(seo_keywords) |
|
pdf.build(story) |
|
|
|
return filename |