我正在尝试为我创建的程序生成PDF文件而不是文本文件。
我的问题是我看了一个reportlab,看起来过于复杂,因为我想要的只是print
到pdf而不是文本文件。
目前的测试代码,它有效,但我对定位和页面末尾的所有行都很困惑,有人可以告诉我如何使用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()
我的程序实际输出的数据:
---------------------------------------------------------
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
谢谢
答案 0 :(得分:1)
我建议你看一下reportlab的鸭嘴兽部分。
Paragraph的行为非常类似于HTML中的DIV容器,它会自动将文本包装在文档的末尾。
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)
你也可以混合帆布和鸭嘴兽 - 这只是让你前进的一个小例子。
要定位元素,我建议您查看鸭嘴兽Table
。
答案 1 :(得分:0)
您可以查看 pdfme 库。是python中创建PDF文档最强大的库,而且非常好用。
要将这些日志“打印”到 PDF 文档中,您可以这样做:
from pdfme import build_pdf
with open("logs.pdf", 'wb') as f:
build_pdf({
"style": {"s": 12, "text_aling": "j"},
"sections": [
{"content": [LOGS_VARIABLE_STR]}
]
}, f)
就是这样。您还可以拆分字符串,根据需要为其设置某种格式,然后按照文档 (https://pdfme.readthedocs.io/) 中的说明添加格式化的段落