For 循环使用 FPDF 填充 PDF

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

我用 python 生成了一份报告,与我从 this 教程中获取的报告类似。

如果您手动输入每个图像的路径,则此页面很容易设置,如下所示:

     pdf.add_page()
     pdf.image("/Users/Foo/Graph1.png", 5, 20, WIDTH/2-10)
     pdf.image("/Users/Foo/Graph2.png", WIDTH/2, 20, WIDTH/2-10)
     pdf.image("/Users/Foo/Graph3.png", 5, 110, WIDTH/2-10)
     pdf.image("/Users/Foo/Graph4.png", WIDTH/2, 110, WIDTH/2-10)
     pdf.image("/Users/Foo/Graph5.png", 5, 200, WIDTH/2-10)
     pdf.image("/Users/Foo/Graph6.png", WIDTH/2, 200, WIDTH/2-10)

如果目录中不总是包含相同数量的 png 文件,则上述代码将不起作用。

我开始编写如下函数,但需要对其后面部分的帮助。

def addtopage(function):
   for f in os.listdir('path'):
      if f.endswith('png') in f:
         #add it to the next position in the pdf

我的问题是,如何创建一个 for 循环,自动循环遍历文件夹,抓取文件夹中的每个 .png,并将它们放置到具有上图格式的 pdf 页面上的下一个位置?

谢谢!

python pandas jupyter-notebook anaconda
2个回答
1
投票

你可以尝试这样的事情:

def addtopage(function):
   png_count = 0
   start_y = 20
   img_ht = 90
   for f in os.listdir('path'):
      if f.endswith('png') in f:
         if png_count%2 == 0
             pdf.image(f, 5, start_y, WIDTH/2-10)
         else:
             pdf.image(f, WIDTH/2-10, start_y, WIDTH/2-10)
             start_y += img_ht
         png_count += 1
         if png_count%6 == 0:
             pdf.add_page()

您仍然可以改进此代码并拥有更多变量以实现更大的灵活性,但这应该提供一个良好的样板。另外,如果您使用 ppyfpdf,我建议您查看 fpdf2。它是 PyFPDF 本身的一个分支,并且正在积极维护(PyFPDF 在 2018 年收到了最后一次提交)。


0
投票

我的文件中有五张图像,我想每页放两张...前两张放在一页上,然后接下来的两张放在第二页上,最后一张放在第三页上。 最后我想要一个循环,其中每个图像一个接一个地定位,一旦没有更多空间容纳下一个图像,就传递一页......我认为这应该很容易,但我做不到。

first page second page

我已经复制了之前的代码,非常感谢。

png_count = 0
start_y = 50
img_ht = 115
for name in imagelist:
    if png_count%2 == 0:
        pdf.image(name, 20, start_y, 160, 100.4)
    else:
        start_y += img_ht
        pdf.image(name, 20, start_y, 160, 100.4)
    png_count += 1
    if png_count%3 == 0:
        pdf.add_page()

第一页有前两个图,但是当我翻到第二页时,第三个图就到了底部。我不知道为什么...

提前感谢您的帮助

© www.soinside.com 2019 - 2024. All rights reserved.