diff --git a/ptulsconv/commands.py b/ptulsconv/commands.py index 43d3683..28aea9b 100644 --- a/ptulsconv/commands.py +++ b/ptulsconv/commands.py @@ -14,6 +14,7 @@ from .validations import * from ptulsconv.pdf.supervisor_1pg import output_report as output_supervisor_1pg from ptulsconv.pdf.line_count import output_report as output_line_count +from ptulsconv.pdf.talent_sides import output_report as output_talent_sides # field_map maps tags in the text export to fields in FMPXMLRESULT # - tuple field 0 is a list of tags, the first tag with contents will be used as source @@ -220,6 +221,7 @@ def convert(input_file, output_format='fmpxml', start=None, end=None, select_ree print("Sorry, the `full` output type is not yet supported.") normalized_records = normalize_record_keys(parsed) output_supervisor_1pg(normalized_records) + output_talent_sides(normalized_records) output_line_count(normalized_records) elif output_format == 'fmpxml': if xsl is None: diff --git a/ptulsconv/pdf/common.py b/ptulsconv/pdf/common.py index dc3d446..d3de29b 100644 --- a/ptulsconv/pdf/common.py +++ b/ptulsconv/pdf/common.py @@ -1,6 +1,13 @@ from reportlab.pdfbase.pdfmetrics import (getAscent, getDescent) +def draw_title_block(canvas, rect, record): + (supervisor, client,), title = rect.divide_y([16., 16., ]) + title.draw_text_cell(canvas, record['Title'], "Futura", 18, inset_y=2.) + client.draw_text_cell(canvas, record.get('Client', ''), "Futura", 11, inset_y=2.) + supervisor.draw_text_cell(canvas, record.get('Supervisor', ''), "Futura", 11, inset_y=2.) + + class GRect: def __init__(self, x, y, width, height, debug_name=None): self.x = x @@ -52,7 +59,7 @@ class GRect: return (GRect(self.min_x, self.min_y, at, self.height), GRect(self.min_x + at, self.y, self.width - at, self.height)) - def split_y(self, at, direction='u') : + def split_y(self, at, direction='u'): if at >= self.height: return None, self elif at <= 0: @@ -189,4 +196,3 @@ class GRect: y = y - leading canvas.restoreState() - diff --git a/ptulsconv/pdf/supervisor_1pg.py b/ptulsconv/pdf/supervisor_1pg.py index 44c1d19..4968fad 100644 --- a/ptulsconv/pdf/supervisor_1pg.py +++ b/ptulsconv/pdf/supervisor_1pg.py @@ -9,7 +9,7 @@ from reportlab.lib.pagesizes import letter from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import Paragraph -from .common import GRect +from .common import GRect, draw_title_block import datetime @@ -17,14 +17,6 @@ import datetime def draw_header_block(canvas, rect, record): rect.draw_text_cell(canvas, record['Cue Number'], "Helvetica", 44, vertical_align='m') - -def draw_title_block(canvas, rect, record): - (supervisor, client,), title = rect.divide_y([16., 16., ]) - title.draw_text_cell(canvas, record['Title'], "Futura", 18, inset_y=2.) - client.draw_text_cell(canvas, record.get('Client', ''), "Futura", 11, inset_y=2.) - supervisor.draw_text_cell(canvas, record.get('Supervisor', ''), "Futura", 11, inset_y=2.) - - def draw_character_row(canvas, rect, record): label_frame, value_frame = rect.split_x(1.25 * inch) label_frame.draw_text_cell(canvas, "CHARACTER", "Futura", 10, force_baseline=9.) diff --git a/ptulsconv/pdf/talent_sides.py b/ptulsconv/pdf/talent_sides.py new file mode 100644 index 0000000..066cd59 --- /dev/null +++ b/ptulsconv/pdf/talent_sides.py @@ -0,0 +1,68 @@ +from .common import GRect, draw_title_block +from reportlab.lib.units import inch +from reportlab.lib.pagesizes import letter + +from reportlab.platypus import BaseDocTemplate, Paragraph, Spacer, KeepTogether, Table, HRFlowable, \ + SimpleDocTemplate, PageTemplate, Frame +from reportlab.lib.styles import getSampleStyleSheet +from reportlab.lib import colors + +from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.ttfonts import TTFont + +page_box = GRect(inch * 0.5, inch * 0.5, letter[0] - inch, letter[1] - inch) +title_box, page_box = page_box.split_y(0.875 * inch, 'd') +header_block, title_block = title_box.split_x(inch * 4.) + + +def output_report(records): + character_numbers = set([n['Character Number'] for n in records['events']]) + pdfmetrics.registerFont(TTFont('Futura', 'Futura.ttc')) + + for n in character_numbers: + lines = [line for line in records['events'] + if 'Omit' not in line.keys() and line['Character Number'] == n] + + page_template = PageTemplate(id="Main", + frames=[Frame(page_box.min_x, page_box.min_y, page_box.width, page_box.height)], + onPage=lambda canv, _: draw_title_block(canv, title_block, lines[0])) + + sorted(lines, key=lambda line: line['PT.Clip.Start_Seconds']) + + doc = BaseDocTemplate("%s_%s_Script.pdf" % (n, lines[0]['Character Name']), + pagesize=letter, leftMargin=0.5 * inch, + rightMargin=0.5 * inch, topMargin=0.5 * inch, bottomMargin=0.5 * inch) + + doc.addPageTemplates([page_template]) + story = [] + + prompt_style = getSampleStyleSheet()['Normal'] + prompt_style.fontName = 'Futura' + prompt_style.fontSize = 18 + + prompt_style.leading = 24 + prompt_style.leftIndent = 1.5 * inch + prompt_style.rightIndent = 1.5 * inch + + number_style = getSampleStyleSheet()['Normal'] + number_style.fontName = 'Futura' + number_style.fontSize = 14 + + number_style.leading = 24 + number_style.leftIndent = 0. + number_style.rightIndent = 0. + + for line in lines: + data_block = [[Paragraph(line['Cue Number'], number_style), + Paragraph(line['PT.Clip.Start'] + " - " + line['PT.Clip.Finish'], number_style) + ]] + story.append( + KeepTogether( + [HRFlowable(width='100%', color=colors.black), + Table(data=data_block, colWidths=[1.5 * inch, 6. * inch]), + Paragraph(line['Line'], prompt_style), + Spacer(1., inch * 1.5)] + ) + ) + + doc.build(story)