You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

69 lines
2.1 KiB

"""Generates PDF cards from a calibre metadata.db."""
from calibrestekje import Book, Comment, Publisher, init_session
from reportlab.lib.pagesizes import *
from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet
from reportlab.pdfgen import canvas
from reportlab.platypus import PageBreak, Paragraph, SimpleDocTemplate, Spacer
def make_cards():
"""The main entrypoint for card generation."""
# TODO: thread arguments into this logic
doc = create_doc("text.pdf")
content = get_fields(doc)
doc.build(content)
def get_fields():
"""Retrieve fields from the metadata."""
content = []
styles = getSampleStyleSheet()
session = init_session("sqlite:///metadata.db")
for book in session.query(Book).all():
ptitle = Paragraph(
"<font size=12>{}</font>".format(book.title), styles["Italic"]
)
ptime = Paragraph(
"<font size=10>Uploaded: {}</font>".format(book.timestamp), styles["Normal"]
)
pcomments = Paragraph("<font size=10>{}</font>".format(comment.text))
format_string = "<font size=12>{}</font>"
all_authors = [author.name for author in book.authors]
glued_together = format_string.format(", ".join(all_authors))
format_string = "<font size=10>{}</font>"
all_tags = [tag.name for tag in book.tags]
tags_glued_together = format_string.format(", ".join(all_tags))
content.append(ptitle)
content.append(Spacer(1, 12))
content.append(ptime)
content.append(Spacer(1, 12))
content.append(pcomments)
p = Paragraph(glued_together, styles["Normal"])
content.append(p)
content.append(PageBreak())
content.append(Spacer(6, 12))
p = Paragraph(tags_glued_together, styles["Normal"])
content.append(p)
content.append(PageBreak())
content.append(Spacer(6, 12))
return content
def create_doc(filename):
"""Build the Report Lab document template."""
return SimpleDocTemplate(
filename,
pagesize=landscape(A6),
rightMargin=18,
leftMargin=18,
topMargin=0,
bottomMargin=18,
)