我用 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 页面上的下一个位置?
谢谢!
你可以尝试这样的事情:
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 年收到了最后一次提交)。
我的文件中有五张图像,我想每页放两张...前两张放在一页上,然后接下来的两张放在第二页上,最后一张放在第三页上。 最后我想要一个循环,其中每个图像一个接一个地定位,一旦没有更多空间容纳下一个图像,就传递一页......我认为这应该很容易,但我做不到。
我已经复制了之前的代码,非常感谢。
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()
第一页有前两个图,但是当我翻到第二页时,第三个图就到了底部。我不知道为什么...
提前感谢您的帮助