"""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( "{}".format(book.title), styles["Italic"] ) ptime = Paragraph( "Uploaded: {}".format(book.timestamp), styles["Normal"] ) pcomments = Paragraph("{}".format(comment.text)) format_string = "{}" all_authors = [author.name for author in book.authors] glued_together = format_string.format(", ".join(all_authors)) format_string = "{}" 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, )