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-userguide