当前,我正在一个项目中,该项目将容纳许多文件夹,并将每个文件夹的内容合并为pdf。表示每个文件夹将输出一个pdf。我能够弄清楚如何使用ReportLab将正在使用的文件合并为单个pdf。现在,我需要遍历每个文件夹并创建一个pdf。到目前为止,我已经可以使用os.walk来运行我的测试目录,但是它不会运行pdf脚本。
import glob
import os
import re
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Image, PageBreak
from reportlab.lib.units import inch
list_of_files = ["C:\\foo_1", "C:\\foo_2"]
os.chdir("C:\\foo")
for root, dirs, files in os.walk(".", topdown = False):
for name in files:
print(os.path.join(root, name)) #used to see where os.walk is working
def sorted_nicely( l ):
"""
http://stackoverflow.com/questions/2669059/how-to-sort-alpha-numeric-set-in-python
Sort the given iterable in the way that humans expect.
"""
convert = lambda text: int(text) if text.isdigit() else text
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(l, key = alphanum_key)
def collect_issue(fname):
if not fname.endswith(".pdf"):
fname += ".pdf"
doc = SimpleDocTemplate(fname,pagesize=letter,
rightMargin=0,leftMargin=0,
topMargin=0,bottomMargin=0)
width = 7.5*inch
height = 9.5*inch
picture_file_names = sorted_nicely(glob.glob("*.jp2"))
contents = []
for pic_fname in picture_file_names:
im = Image(pic_fname, width=width, height=height)
contents.append(im)
contents.append(PageBreak())
doc.build(contents)
if __name__ == "__main__":
collect_issue("test")
我正在寻找使用os.walk的帮助,以使pdf脚本可以运行在我需要的许多文件夹中。我不完全确定到底是什么原因导致它也不起作用。作为参考,许多代码都基于this script。
答案 0 :(得分:0)
这是一个总体上不太理想的解决方案,但它足以解决我原来的问题。
import glob
import os
import re
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Image, PageBreak
from reportlab.lib.units import inch
os.chdir("C:\\Foo")
file_num = 0
for root, dirs, files in os.walk(".", topdown = False):
def collect_issue(fname):
if not fname.endswith(".pdf"):
fname += ".pdf"
doc = SimpleDocTemplate(fname,pagesize=letter,
rightMargin=0,leftMargin=0,
topMargin=0,bottomMargin=0)
width = 7.5*inch
height = 9.5*inch
contents = []
print(root)
for name in files:
im = Image(root + "\\" + name, width, height)
contents.append(im)
contents.append(PageBreak())
if contents:
doc.build(contents)
collect_issue("test" + str(file_num))
file_num += 1