I'm trying to generate a PDF file instead of a text file for a program I've created.
My issue is I've looked a reportlab and it seems overly complicated for what I need, as all I want is to essentially print
to a pdf instead of a text file.
current test code, it works but I'm confused about positioning and all the lines run of the end of the page, could someone please advise me on how positioning works with reportlab
from reportlab.pdfgen import canvas
def genText():
text =["Call me Ishmael.",
"Some years ago- never mind how long precisely- having little or no money in my purse,",
"and nothing particular to interest me on shore,",
"I thought I would sail about a little and see the watery part of the world."]
return text
def testText(page,text):
from reportlab.lib.units import inch
textobject = page.beginText()
textobject.setTextOrigin(inch, 2.5*inch)
textobject.setFont("Helvetica-Oblique", 14)
for line in text:
textobject.textLine(line)
page.drawText(textobject)
page = canvas.Canvas("JIMTEST.pdf")
text = genText()
testText(page, text)
page.showPage()
page.save()
Data that is actually output by my program:
---------------------------------------------------------
Milk Company: Bobbys Milk
Haulier: Jims Hauliers
Truck: T55JHH
Driver: 123 Route: 852
Joe Bloggs
Everyday Collection
MilkType: Ordinary
---------------------------------------------------------
Last TankWash
Start Time: 2016/03/31 13:30:32
Finsished: 14:21:03
Litres: 9451
Temperature: 70.0 deg_C
770500 CREAMERY
---------------------------------------------------------
Locn Litres
770083 Wyrill
Coll 1643 2.0 deg_C smp 143
2016/04/01 06:40:28
770084 Foster
Coll 2242 1.0 deg_C smp 28
2016/04/01 07:17:57
770080 Dugdale
Coll 8237 4.0 deg_C smp 49
2016/04/01 08:02:39
770086 Cragg
Coll 4591 1.7 deg_C smp 68
2016/04/01 09:00:17
770051 D & S Spence
Coll 2868 3.7 deg_C smp 83
2016/04/01 10:06:11
770500 CREAMERY
delyFZ -19581
Tank# 0 Ower# 3805
2016/04/01 11:14:11
---------------------------------------------------------
Milk Collected: 19581
Milk OnBoard: 0
---------------------------------------------------------
Estimated Print Time at: 2016/04/01 11:14:16
Thanks
I sugggest you look at the platypus part of reportlab.
The Paragraph acts pretty much like a DIV container in HTML and will wrap text automatically at the end of the document.
from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
def genText():
text = ["Call me Ishmael.",
"Some years ago- never mind how long precisely- having little or no money in my purse,",
"and nothing particular to interest me on shore,",
"I thought I would sail about a little and see the watery part of the world."]
return text
styles = getSampleStyleSheet()
doc = SimpleDocTemplate("my_doc.pdf", pagesize=A4)
Story=[]
text = genText()
for t in text:
Story.append(Paragraph(t, styles["Normal"]))
Story.append(Spacer(10, 10))
t = "lorem ipsum " * 100
Story.append(Paragraph(t, styles["Normal"]))
doc.build(Story)
Of couse you can also mix canvas and platypus - this is just a minimal example to get you going.
To position your elements I suggest you look at the platypus Table
.