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

Python 如何从不同文档中的信息在Reportlab中生成pdf?,python,reportlab,Python,Reportlab,请任何人谁知道,帮助我了解这个代码可以如何工作,以产生所需的页面 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:

请任何人谁知道,帮助我了解这个代码可以如何工作,以产生所需的页面

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。

我不知道我是否理解这个问题,但我会在不嵌套循环的情况下这样做

假设样本1中有三行
X
Y
Z
,样本2中有三行
ABC
DEF
GHI

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])  # X / Y / Z
    c.showPage()

for b in sample2:
    c.drawString(200, 700, b[0])  # A / D / G
    c.drawString(200, 600, b[1])  # B / E / H
    c.drawString(200, 500, b[2])  # C / F / I
    c.showPage()

c.save()
它创建了三个页面
X
Y
Z
,以及接下来的三个页面
ABC
DEF
GHI

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])  # X / Y / Z
    c.showPage()

for b in sample2:
    c.drawString(200, 700, b[0])  # A / D / G
    c.drawString(200, 600, b[1])  # B / E / H
    c.drawString(200, 500, b[2])  # C / F / I
    c.showPage()

c.save()
但是如果您只想创建三个页面
X+ABC
Y+DEF
Z+GHI
,那么您需要
zip()


顺便说一句:如果你需要九页

  • X+ABC
    X+DEF
    X+GHI
  • Y+ABC
    Y+DEF
    Y+GHI
  • Z+ABC
    Z+DEF
    Z+GHI
然后您必须将
抽绳(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()

我不知道我是否理解这个问题,但我会在不嵌套循环的情况下这样做

假设样本1中有三行
X
Y
Z
,样本2中有三行
ABC
DEF
GHI

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])  # X / Y / Z
    c.showPage()

for b in sample2:
    c.drawString(200, 700, b[0])  # A / D / G
    c.drawString(200, 600, b[1])  # B / E / H
    c.drawString(200, 500, b[2])  # C / F / I
    c.showPage()

c.save()
它创建了三个页面
X
Y
Z
,以及接下来的三个页面
ABC
DEF
GHI

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])  # X / Y / Z
    c.showPage()

for b in sample2:
    c.drawString(200, 700, b[0])  # A / D / G
    c.drawString(200, 600, b[1])  # B / E / H
    c.drawString(200, 500, b[2])  # C / F / I
    c.showPage()

c.save()
但是如果您只想创建三个页面
X+ABC
Y+DEF
Z+GHI
,那么您需要
zip()


顺便说一句:如果你需要九页

  • X+ABC
    X+DEF
    X+GHI
  • Y+ABC
    Y+DEF
    Y+GHI
  • Z+ABC
    Z+DEF
    Z+GHI
然后您必须将
抽绳(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()

为什么要为-循环嵌套
?我认为这是它可以工作的方式,但事实并非如此。我别无选择。你期望有多少页?@furas。五页,因为两个文档中每一个都有5行,所以您需要使用
zip()
-查看我的答案。为什么要为
-循环嵌套
。我别无选择。你期望有多少页?@furas。五页,因为两个文档中各有5行,所以您需要使用
zip()
的版本-请参阅我的答案。