从mysql到reportlab的多值

to94eoyn  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(355)

我有一个问题,我不能在mysql表中显示我的第二条记录。报表只在一行中显示一条记录,而第二条记录不显示在pdf文件中。我在Python2.7上使用reportlab作为报表生成器
这是我无法修复的代码:

def nilaisql():
  rpt = raw_input("input NPM : ")
  sql = "select nama, tanggal, jamMasuk from t_"+rpt
  curs.execute(sql)
  result = curs.fetchall()
  for row in result:
      c = canvas.Canvas("Sampelone.pdf")
      c.drawString(250, 700, str(row[0]))
      c.save()
  os.system("Sampelone.pdf")

这是我在mysql上的记录。我想显示第二行记录,但pdf只是显示第一行记录
它应该显示第二行记录
这是我的pdf文件的结果
我被困在这里,如果你知道一些事情,我真的很感激你能在这里分享解决方案

s5a0g9ez

s5a0g9ez1#

for row in result:
  c = canvas.Canvas("Sampelone.pdf")
  c.drawString(250, 700, str(row[0]))
  c.save()

代码片段所做的是创建一个新文件并编写变量的内容 row 输入pdf文件并 c.save 保存它。在下一次迭代中,将重新创建同一个文件,该文件为空,原始文件将被该空文件和 row 这就是为什么你总是只能看到第一行记录。
这应该很管用。根据您的用途和文档高度增加或减少y的值。

c = canvas.Canvas("Sampelone.pdf") #creates a pdf
for row in result:   
  c.drawString(250, y, str(row[0])) #writes data at given co-ordinates
c.save() #saves the pdf

这样您就可以看到pdf中的所有行记录。
但这种做法不被认为是好的,你应该总是把你的数据在流动像这样。

from reportlab.lib import styles
from reportlab.platypus import SimpleDocTemplate, Paragraph

def nilaisql():
    pdfname = 'mydoc.pdf'
    doc = SimpleDocTemplate(
        pdfname
    )
    style = styles["Normal"]
    story = []

    rpt = raw_input("input NPM : ")
    sql = "select nama, tanggal, jamMasuk from t_" + rpt
    curs.execute(sql)
    result = curs.fetchall()

    for row in result:
        story.append(Paragraph(row, style))

    doc.build(
        story
    )

    os.system("Sampelone.pdf")

在reportlab用户指南中阅读有关flowables的更多信息

相关问题