from datetime import datetime from jinja2 import Environment, FileSystemLoader from xhtml2pdf import pisa import StringIO jinja_options = { "loader": FileSystemLoader('util'), } env = Environment(**jinja_options) def renderInvoiceToPdf(invoice, user): """ Renders a nice PDF display for the given invoice. """ sourceHtml = renderInvoiceToHtml(invoice, user) output = StringIO.StringIO() pisaStatus = pisa.CreatePDF(sourceHtml, dest=output) if pisaStatus.err: return None value = output.getvalue() output.close() return value def renderInvoiceToHtml(invoice, user): """ Renders a nice HTML display for the given invoice. """ from endpoints.api.billing import get_invoice_fields def get_price(price): if not price: return '$0' return '$' + '{0:.2f}'.format(float(price) / 100) def get_range(line): if line.period and line.period.start and line.period.end: return ': ' + format_date(line.period.start) + ' - ' + format_date(line.period.end) return '' def format_date(timestamp): return datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d') data = { 'user': user.username, 'invoice': invoice, 'invoice_date': format_date(invoice.date), 'getPrice': get_price, 'getRange': get_range, 'custom_fields': get_invoice_fields(user)[0], } template = env.get_template('invoice.tmpl') rendered = template.render(data) return rendered