如何从不同文档的信息中在Reportlab中生成pdf?

问题描述 投票:0回答:1

谁知道,请帮助我了解此代码如何产生所需的页面。

c = canvas.Canvas("sample.pdf")
sample1 = csv.reader(open('sample1.csv'))
for i in sample1:
    first = i[0]
    c.drawString(100,800,first)
    sample2 = csv.reader(open('sample2.csv'))
    for x in sample2:
        sec = x[0]
        third = x[1]
        fourth = x[2]
        c.drawString(200,700,sec)
        c.drawString(200,600,third)
        c.drawString(200,500,fourth)
    c.showPage()
c.save()

照原样,它仅成功打印出sample2中的文档,并成功打印出sample1中项目的一页...。我正在尝试从两个文档中提取信息以用于生成一个pdf。

python reportlab
1个回答
0
投票

我不知道我是否理解问题,但是我会在没有嵌套循环的情况下进行此操作

它创建三个页面XYZ和接下来的三个页面ABCDEFGHI

from reportlab.pdfgen import canvas
import csv

c = canvas.Canvas("sample.pdf")

#sample1 = csv.reader(open('sample1.csv'))
#sample2 = csv.reader(open('sample2.csv'))
sample1 = ["X", "Y", "Z"]
sample2 = ["ABC", "DEF", "GHI"]

for a in sample1:
    c.drawString(100, 800, a[0])
    c.showPage()

for b in sample2:
    c.drawString(200, 700, b[0])
    c.drawString(200, 600, b[1])
    c.drawString(200, 500, b[2])
    c.showPage()

c.save()

但是如果您只想创建三个页面X+ABCY+DEFZ+GHI,则需要zip()

from reportlab.pdfgen import canvas
import csv

c = canvas.Canvas("sample.pdf")

#sample1 = csv.reader(open('sample1.csv'))
#sample2 = csv.reader(open('sample2.csv'))
sample1 = ["X", "Y", "Z"]
sample2 = ["ABC", "DEF", "GHI"]

for a, b in zip(sample1, sample2):
    c.drawString(100, 800, a[0])

    c.drawString(200, 700, b[0])
    c.drawString(200, 600, b[1])
    c.drawString(200, 500, b[2])

    c.showPage()

c.save()

BTW:如果需要九页

  • X+ABCX+DEFX+GHI
  • [Y+ABCY+DEFY+GHI
  • [Z+ABCZ+DEFZ+GHI

然后您必须在第二个循环内移动drawString( a[0])showPage()

from reportlab.pdfgen import canvas
import csv

c = canvas.Canvas("sample.pdf")

#sample1 = csv.reader(open('sample1.csv'))
sample1 = ["X", "Y", "Z"]

for a in sample1:

    #sample2 = csv.reader(open('sample2.csv'))
    sample2 = ["ABC", "DEF", "GHI"]

    for b in sample2:
        c.drawString(100, 800, a[0])

        c.drawString(200, 700, b[0])
        c.drawString(200, 600, b[1])
        c.drawString(200, 500, b[2])

        c.showPage()

c.save()
© www.soinside.com 2019 - 2024. All rights reserved.