diff --git a/openslides/utils/pdf.py b/openslides/utils/pdf.py
index c91011683..407ef50e4 100755
--- a/openslides/utils/pdf.py
+++ b/openslides/utils/pdf.py
@@ -21,9 +21,9 @@ from django.contrib.auth.models import User
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
-from reportlab.lib.units import cm, inch
+from reportlab.lib.units import cm
from reportlab.lib.styles import ParagraphStyle as PS
-from reportlab.lib.styles import getSampleStyleSheet
+from reportlab.lib.styles import StyleSheet1, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, Frame, PageBreak, Spacer, Table, LongTable, TableStyle, Image
from reportlab.platypus.doctemplate import SimpleDocTemplate
from reportlab.rl_config import defaultPageSize
@@ -43,72 +43,85 @@ pdfmetrics.registerFont(TTFont('Ubuntu-Bold', 'openslides/static/fonts/Ubuntu-B.
pdfmetrics.registerFont(TTFont('Ubuntu-Italic', 'openslides/static/fonts/Ubuntu-RI.ttf'))
# set style information
-styles = getSampleStyleSheet()
PAGE_HEIGHT=defaultPageSize[1];
PAGE_WIDTH=defaultPageSize[0]
-h2 = PS(name = 'h2',
- fontName = 'Ubuntu-Bold',
- fontSize = 14,
- leading = 24,
- leftIndent = 0,
- spaceAfter = 10)
-h3 = PS(name = 'h3',
- fontName = 'Ubuntu-Bold',
- fontSize = 12,
- leading = 24,
- leftIndent = 0,
- spaceAfter = 0)
+# set custom stylesheets
+stylesheet = StyleSheet1()
+stylesheet.add(ParagraphStyle(name = 'Normal',
+ fontName = 'Ubuntu',
+ fontSize = 10,
+ leading = 12)
+ )
+stylesheet.add(ParagraphStyle(name = 'Paragraph',
+ parent = stylesheet['Normal'],
+ leading = 14,
+ spaceAfter = 15)
+ )
+stylesheet.add(ParagraphStyle(name = 'Italic',
+ parent = stylesheet['Normal'],
+ fontName = 'Ubuntu-Italic',
+ spaceAfter = 5)
+ )
+stylesheet.add(ParagraphStyle(name = 'Bold',
+ parent = stylesheet['Normal'],
+ fontName = 'Ubuntu-Bold')
+ )
+stylesheet.add(ParagraphStyle(name = 'Heading1',
+ parent = stylesheet['Bold'],
+ fontSize = 18,
+ leading = 22,
+ spaceAfter = 6),
+ alias = 'h1')
+stylesheet.add(ParagraphStyle(name = 'Heading2',
+ parent = stylesheet['Bold'],
+ fontSize = 14,
+ leading = 24,
+ spaceAfter = 10),
+ alias = 'h2')
+stylesheet.add(ParagraphStyle(name = 'Heading3',
+ parent = stylesheet['Bold'],
+ fontSize = 12,
+ leading = 24),
+ alias = 'h3')
+stylesheet.add(ParagraphStyle(name = 'Item',
+ parent = stylesheet['Normal'],
+ fontSize = 14,
+ leading = 12,
+ leftIndent = 0,
+ spaceAfter = 15)
+ )
+stylesheet.add(ParagraphStyle(name = 'Subitem',
+ parent = stylesheet['Normal'],
+ fontSize = 10,
+ leading = 4,
+ leftIndent = 20,
+ spaceAfter = 15)
+ )
+stylesheet.add(ParagraphStyle(name = 'Tablecell',
+ parent = stylesheet['Normal'],
+ fontSize = 9)
+ )
+
+
h3_poll = PS(name = 'h3_poll',
fontName = 'Ubuntu-Bold',
fontSize = 12,
leading = 14,
leftIndent = 30,
spaceAfter = 0)
-p = PS(name = 'Normal',
- fontName = 'Ubuntu',
- fontSize = 10,
- leading = 14,
- leftIndent = 0,
- spaceAfter = 15)
-i = PS(name = 'Italic',
- fontName = 'Ubuntu-Italic',
- fontSize = 10,
- leftIndent = 0,
- spaceAfter = 5)
i_poll = PS(name = 'i_poll',
fontName = 'Ubuntu',
fontSize = 10,
leftIndent = 30,
rightIndent = 20,
spaceAfter = 0)
-small = PS(name = 'small',
- fontName = 'Ubuntu',
- fontSize = 7,
- leading = 14,
- leftIndent = 0,
- spaceAfter = 0)
small_poll = PS(name = 'small',
fontName = 'Ubuntu',
fontSize = 7,
leading = 14,
leftIndent = 30,
spaceAfter = 0)
-itemstyle = PS(name = 'Normal',
- fontName = 'Ubuntu',
- fontSize = 14,
- leading = 12,
- leftIndent = 0,
- spaceAfter = 15)
-subitemstyle = PS(name = 'Normal',
- fontName = 'Ubuntu',
- fontSize = 10,
- leading = 4,
- leftIndent = 20,
- spaceAfter = 15)
-cellstyle = PS(name='Normal',
- fontName = 'Ubuntu',
- fontSize = 9)
polloption = PS(name = 'polloption',
fontName = 'Ubuntu',
fontSize = 12,
@@ -151,6 +164,7 @@ event_organizer = config_get("event_organizer")
# set print time
time = datetime.now().strftime(_("%Y-%m-%d %H:%Mh"))
+
def firstPage(canvas, doc):
canvas.saveState()
# page header (with event information)
@@ -165,10 +179,12 @@ def firstPage(canvas, doc):
# title
canvas.setFont('Ubuntu-Bold',24)
canvas.setFillGray(0)
- canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, doc.title)
+ #canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, doc.title)
+ canvas.drawString(2.75*cm, PAGE_HEIGHT-108, doc.title)
canvas.setFont('Ubuntu',10)
canvas.setFillGray(0.4)
- canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-125, doc.subtitle)
+ #canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-125, doc.subtitle)
+ canvas.drawString(2.75*cm, PAGE_HEIGHT-125, doc.subtitle)
# footer (with page number)
canvas.setFont('Ubuntu',8)
canvas.setFillGray(0.4)
@@ -203,13 +219,13 @@ def print_agenda(request, printAllItems=None):
# print all items
if printAllItems:
if item.parents:
- story.append(Paragraph(item.title, subitemstyle))
+ story.append(Paragraph(item.title, stylesheet['Subitem']))
else:
- story.append(Paragraph(item.title, itemstyle))
+ story.append(Paragraph(item.title, stylesheet['Item']))
# print items without parents only
else:
if item.parent is None:
- story.append(Paragraph(item.title, itemstyle))
+ story.append(Paragraph(item.title, stylesheet['Subitem']))
doc.build(story, onFirstPage=firstPage, onLaterPages=laterPages)
return response
@@ -232,11 +248,11 @@ def print_userlist(request):
counter += 1
user.get_profile()
data.append([counter,
- Paragraph(user.last_name, cellstyle),
- Paragraph(user.first_name, cellstyle),
- Paragraph(user.profile.group, cellstyle),
- Paragraph(user.profile.type, cellstyle),
- Paragraph(user.profile.committee, cellstyle),
+ Paragraph(user.last_name, stylesheet['Tablecell']),
+ Paragraph(user.first_name, stylesheet['Tablecell']),
+ Paragraph(user.profile.group, stylesheet['Tablecell']),
+ Paragraph(user.profile.type, stylesheet['Tablecell']),
+ Paragraph(user.profile.committee, stylesheet['Tablecell']),
])
except Profile.DoesNotExist:
counter -= 1
@@ -267,28 +283,28 @@ def print_application(request, application_id=None):
doc.subtitle = ""
for application in Application.objects.exclude(number=None).order_by('number'):
- story.append(Paragraph(_("Application")+" #%s: %s" % (application.number, application.title), h3))
+ story.append(Paragraph(_("Application")+" #%s: %s" % (application.number, application.title), stylesheet['Heading3']))
# Applications (each application on single page)
for application in Application.objects.exclude(number=None).order_by('number'):
story.append(PageBreak())
- story.append(Paragraph(_("Application")+" #%s: %s" % (application.number, application.title), h2))
- story.append(Paragraph("%s" % application.text.replace('\r\n','
'), p))
- story.append(Paragraph(_("Reason")+":", h3))
- story.append(Paragraph("%s" % application.reason.replace('\r\n','
'), p))
- story.append(Paragraph(_("Submitter")+": %s" % unicode(application.submitter), i))
- story.append(Paragraph(_("Created")+": %s" % application.time.strftime(_("%Y-%m-%d %H:%Mh")), i))
+ story.append(Paragraph(_("Application")+" #%s: %s" % (application.number, application.title), stylesheet['Heading2']))
+ story.append(Paragraph("%s" % application.text.replace('\r\n','
'), stylesheet['Paragraph']))
+ story.append(Paragraph(_("Reason")+":", stylesheet['Heading3']))
+ story.append(Paragraph("%s" % application.reason.replace('\r\n','
'), stylesheet['Paragraph']))
+ story.append(Paragraph(_("Submitter")+": %s" % unicode(application.submitter), stylesheet['Italic']))
+ story.append(Paragraph(_("Created")+": %s" % application.time.strftime(_("%Y-%m-%d %H:%Mh")), stylesheet['Italic']))
supporters = ""
for s in application.supporter.all():
supporters += "%s, " % unicode(s)
- story.append(Paragraph(_("Supporter")+": %s" % supporters, i))
+ story.append(Paragraph(_("Supporter")+": %s" % supporters, stylesheet['Italic']))
note = ""
for n in application.notes:
note += "%s " % unicode(n)
if note != "":
- story.append(Paragraph(_("Status")+": %s | %s" % (application.get_status_display(), note), i))
+ story.append(Paragraph(_("Status")+": %s | %s" % (application.get_status_display(), note), stylesheet['Italic']))
else:
- story.append(Paragraph(_("Status")+": %s" % (application.get_status_display()), i))
+ story.append(Paragraph(_("Status")+": %s" % (application.get_status_display()), stylesheet['Italic']))
else: # print selected application
application = Application.objects.get(id=application_id)
@@ -301,23 +317,23 @@ def print_application(request, application_id=None):
doc.title = _("Application")+" #%s" % application.number
doc.subtitle = ""
- story.append(Paragraph(application.title, h2))
- story.append(Paragraph("%s" % application.text.replace('\r\n','
'), p))
- story.append(Paragraph(_("Reason")+":", h3))
- story.append(Paragraph("%s" % application.reason.replace('\r\n','
'), p))
- story.append(Paragraph(_("Submitter")+": %s" % unicode(application.submitter), i))
- story.append(Paragraph(_("Created")+": %s" % application.time.strftime(_("%Y-%m-%d %H:%Mh")), i))
+ story.append(Paragraph(application.title, stylesheet['Heading2']))
+ story.append(Paragraph("%s" % application.text.replace('\r\n','
'), stylesheet['Paragraph']))
+ story.append(Paragraph(_("Reason")+":", stylesheet['Heading3']))
+ story.append(Paragraph("%s" % application.reason.replace('\r\n','
'), stylesheet['Paragraph']))
+ story.append(Paragraph(_("Submitter")+": %s" % unicode(application.submitter), stylesheet['Italic']))
+ story.append(Paragraph(_("Created")+": %s" % application.time.strftime(_("%Y-%m-%d %H:%Mh")), stylesheet['Italic']))
supporters = ""
for s in application.supporter.all():
supporters += "%s, " % unicode(s)
- story.append(Paragraph(_("Supporter")+": %s" % supporters, i))
+ story.append(Paragraph(_("Supporter")+": %s" % supporters, stylesheet['Italic']))
note = ""
for n in application.notes:
note += "%s " % unicode(n)
if note != "":
- story.append(Paragraph(_("Status")+": %s | %s" % (application.get_status_display(), note), i))
+ story.append(Paragraph(_("Status")+": %s | %s" % (application.get_status_display(), note), stylesheet['Italic']))
else:
- story.append(Paragraph(_("Status")+": %s" % (application.get_status_display()), i))
+ story.append(Paragraph(_("Status")+": %s" % (application.get_status_display()), stylesheet['Italic']))
doc.build(story, onFirstPage=firstPage, onLaterPages=laterPages)
return response