Here is a simple test case:
Modify the base_style array as indicated to expose the problem I see.
/Nils
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import MySQLdb
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter, A4, inch,cm
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph, SimpleDocTemplate, PageBreak
from PIL import Image
from datetime import datetime
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter, A4, inch, cm
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph, SimpleDocTemplate, PageBreak
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase.pdfmetrics import registerFontFamily
# My Liberation fonts are installed in: /usr/share/fonts/liberation
pdfmetrics.registerFont(TTFont('SansR',
'/usr/share/fonts/liberation/LiberationSans-Regular.ttf'))
pdfmetrics.registerFont(TTFont('SansB',
'/usr/share/fonts/liberation/LiberationSans-Bold.ttf'))
pdfmetrics.registerFont(TTFont('SansI',
'/usr/share/fonts/liberation/LiberationSans-Italic.ttf'))
pdfmetrics.registerFont(TTFont('SansBI',
'/usr/share/fonts/liberation/LiberationSans-BoldItalic.ttf'))
registerFontFamily('Sans',normal='SansR',bold='SansB',italic='SansI',boldIta
lic='SansBI')
filename='mytest.pdf'
page_width, page_height = A4
PDFdoc = SimpleDocTemplate(filename,pagesize=A4)
PDFdoc_elements=[]
from reportlab.lib.colors import black
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Table,TableStyle
from reportlab.platypus import Paragraph, SimpleDocTemplate, PageBreak
styles = getSampleStyleSheet()
styleH = styles['Heading1']
styleN = styles['Normal']
base_style=[('GRID', (0,0), (-1,-1), 1, (0,0,0)),
('FONT', (1,0), (1,-1), 'SansR'),
# ('FONT', (1,0), (1,-1), 'Courier'),
('BOX', (0,0), (-1,-1), 3, (0,0,0)),
('ALIGN',(1,0),(1,-1),'RIGHT'),
('ALIGN',(3,0),(3,-1),'RIGHT'),
('VALIGN',(0,0),(-1,-1),'TOP')]
data=[('ČOL1','ČOL2','ČOL3','COL4','COL5')]
data.append(['ČOL1','ČOL2','ČOL3','COL4','COL5'])
data.append(['ČOL1','ČOL2','ČOL3','COL4','COL5'])
data.append(['ČOL1','ČOL2','ČOL3','COL4','COL5'])
t=Table(data)
styles=list(base_style)
t.setStyle(TableStyle(styles))
PDFdoc_elements.append(t)
PDFdoc.build(PDFdoc_elements)
PDFcanvas=PDFdoc.canv
PDFcanvas.setStrokeColorRGB(132.0/255,0.0/255,50.0/255)
PDFcanvas.setFont("Courier", 20)
PDFcanvas.drawString(5*cm, page_height - 8*cm, 'Č TALLY HOOO!!! č')
PDFcanvas.setFont("SansB", 20)
PDFcanvas.drawString(5*cm, page_height - 10*cm, 'Č TALLY HOOO!!! č')
PDFcanvas.showPage()
PDFcanvas.save()
_______________________________________________
reportlab-users mailing list
reportl...@lists2.reportlab.com
http://two.pairlist.net/mailman/listinfo/reportlab-users
I think the error is that you are re-using the canvas at the end of the build.
Effectively you are re-using the canvas page and saving it again. That
probably means you are re-defining the subset fonts again in the document.
I think the intent is for your extra code to write on the last document page.
The correct way to do that is to to have your page template have an onPageEnd
attribute.
On 25/09/2013 22:36, Nils Smeds wrote:
............
> PDFdoc.build(PDFdoc_elements)
>
> PDFcanvas=PDFdoc.canv
>
> PDFcanvas.setStrokeColorRGB(132.0/255,0.0/255,50.0/255)
> PDFcanvas.setFont("Courier", 20)
> PDFcanvas.drawString(5*cm, page_height - 8*cm, 'Č TALLY HOOO!!! č')
> PDFcanvas.setFont("SansB", 20)
> PDFcanvas.drawString(5*cm, page_height - 10*cm, 'Č TALLY HOOO!!! č')
>
> PDFcanvas.showPage()
> PDFcanvas.save()
SimpleDocTemplate doesn't really allow you to specify the onPageEnd attributes
too easily, but you can get the onPage attributes set fairly easily eg
> def myOnPage(PDFcanvas,doc):
> PDFcanvas.setStrokeColorRGB(132.0/255,0.0/255,50.0/255)
> PDFcanvas.setFont("Courier", 20)
> PDFcanvas.drawString(5*cm, page_height - 8*cm, 'C TALLY HOOO!!! c')
> PDFcanvas.setFont("SansB", 20)
> PDFcanvas.drawString(5*cm, page_height - 10*cm, 'C TALLY HOOO!!! c')
..........
> PDFdoc.build(PDFdoc_elements,onFirstPage=myOnPage,onLaterPages=myOnPage)
--
Robin Becker