User:Alexander Roidl/reportlab: Difference between revisions
(Created page with "=Reportlab=") |
No edit summary |
||
Line 1: | Line 1: | ||
=Reportlab= | =Reportlab= | ||
Using the Base Doc Template | |||
import the BaseDocTemplate | |||
<source lang="python"> | |||
from reportlab.platypus import BaseDocTemplate | |||
</source> | |||
all other dependencies of Reportlab nee to be imported as well | |||
for example a few imports: | |||
<source lang="python"> | |||
from reportlab.pdfgen import canvas | |||
from reportlab.lib.styles import getSampleStyleSheet | |||
from reportlab.lib.styles import ParagraphStyle | |||
from reportlab.lib.units import cm | |||
from reportlab.lib.units import inch | |||
from reportlab.lib.pagesizes import A5 | |||
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY | |||
from reportlab.pdfbase import pdfmetrics | |||
from reportlab.pdfbase.pdfmetrics import registerFontFamily | |||
from reportlab.platypus.tableofcontents import TableOfContents | |||
from reportlab.graphics.shapes import Drawing, Rect, Line | |||
from reportlab.pdfbase.ttfonts import TTFont | |||
</source> | |||
initialize the Doc Template | |||
<source lang="python"> | |||
doc = BaseDocTemplate('layout.pdf',showBoundary=0, pagesize=A5, leftMargin=0.7*cm, bottomMargin=1.5*cm, topMargin=0.7*cm, rightMargin=0.7*cm) | |||
</source> | |||
layout.pdf is the outputname | |||
showBoundary can be set to 1 to show the borders (for debugging) | |||
in this Template you can draw Frames where the Text will flow in: (this example is for making a 2 columns layout) | |||
<source lang="python"> | |||
frame1 = Frame(doc.leftMargin+innerMargin, doc.bottomMargin, (doc.width-innerMargin)/2-6, doc.height, leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0,id='col1') | |||
frame2 = Frame(doc.leftMargin+innerMargin+(doc.width-innerMargin)/2+6, doc.bottomMargin, (doc.width-innerMargin)/2-6, doc.height,leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0, id='col2') | |||
</source> | |||
you need to add this frames to the Template: | |||
<source lang="python"> | |||
doc.addPageTemplates([PageTemplate(id='TwoCol1',frames=[frame1,frame2]), ]) | |||
</source> | |||
In order to format your Text you need to make styles: | |||
<source lang="python"> | |||
style = ParagraphStyle( | |||
name='Normal', | |||
fontName='MyFont', | |||
fontSize=9, | |||
leading=12, | |||
leftIndent=0, | |||
rightIndent=0, | |||
firstLineIndent=0, | |||
alignment=TA_LEFT, | |||
spaceBefore=0, | |||
spaceAfter=0, | |||
bulletFontName='Times-Roman', | |||
bulletFontSize=10, | |||
bulletIndent=0, | |||
textColor= black, | |||
backColor=None, | |||
wordWrap=None, | |||
borderWidth= 0, | |||
borderPadding= 0, | |||
borderColor= None, | |||
borderRadius= None, | |||
allowWidows= 0, | |||
allowOrphans= 0, | |||
textTransform=None, # 'uppercase' | 'lowercase' | None | |||
endDots=None, | |||
splitLongWords=1, | |||
) | |||
</source> | |||
Now you can draw to the Frame with: | |||
<source lang="python"> | |||
Elements=[] | |||
content = ''' This is what my content is ''' | |||
Elements.append(Paragraph(content,style)) | |||
Elements.append(PageBreak()) | |||
doc.multiBuild(Elements) | |||
</source> |
Revision as of 11:14, 24 March 2018
Reportlab
Using the Base Doc Template
import the BaseDocTemplate
from reportlab.platypus import BaseDocTemplate
all other dependencies of Reportlab nee to be imported as well
for example a few imports:
from reportlab.pdfgen import canvas
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib.units import inch
from reportlab.lib.pagesizes import A5
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.pdfmetrics import registerFontFamily
from reportlab.platypus.tableofcontents import TableOfContents
from reportlab.graphics.shapes import Drawing, Rect, Line
from reportlab.pdfbase.ttfonts import TTFont
initialize the Doc Template
doc = BaseDocTemplate('layout.pdf',showBoundary=0, pagesize=A5, leftMargin=0.7*cm, bottomMargin=1.5*cm, topMargin=0.7*cm, rightMargin=0.7*cm)
layout.pdf is the outputname showBoundary can be set to 1 to show the borders (for debugging)
in this Template you can draw Frames where the Text will flow in: (this example is for making a 2 columns layout)
frame1 = Frame(doc.leftMargin+innerMargin, doc.bottomMargin, (doc.width-innerMargin)/2-6, doc.height, leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0,id='col1')
frame2 = Frame(doc.leftMargin+innerMargin+(doc.width-innerMargin)/2+6, doc.bottomMargin, (doc.width-innerMargin)/2-6, doc.height,leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0, id='col2')
you need to add this frames to the Template:
doc.addPageTemplates([PageTemplate(id='TwoCol1',frames=[frame1,frame2]), ])
In order to format your Text you need to make styles:
style = ParagraphStyle(
name='Normal',
fontName='MyFont',
fontSize=9,
leading=12,
leftIndent=0,
rightIndent=0,
firstLineIndent=0,
alignment=TA_LEFT,
spaceBefore=0,
spaceAfter=0,
bulletFontName='Times-Roman',
bulletFontSize=10,
bulletIndent=0,
textColor= black,
backColor=None,
wordWrap=None,
borderWidth= 0,
borderPadding= 0,
borderColor= None,
borderRadius= None,
allowWidows= 0,
allowOrphans= 0,
textTransform=None, # 'uppercase' | 'lowercase' | None
endDots=None,
splitLongWords=1,
)
Now you can draw to the Frame with:
Elements=[]
content = ''' This is what my content is '''
Elements.append(Paragraph(content,style))
Elements.append(PageBreak())
doc.multiBuild(Elements)