0

任何知道的人都可以帮助我了解此代码如何工作以生成所需的页面。

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。

4

1 回答 1

2

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

我假设您在 sample1 中有三行XYZsample2 中有三行ABC,,DEFGHI

它创建三个页面X,YZ接下来的三个页面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+ABCY+DEF那么Z+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()

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

  • X+ABC, X+DEF,X+GHI
  • Y+ABC, Y+DEF,Y+GHI
  • Z+ABC, Z+DEF,Z+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()
于 2020-06-11T23:00:49.490 回答