Python reportlab将canvas保存到指定位置

7
我想知道如何让我的脚本保存到桌面。这是我的代码:
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.platypus import Image

import csv
import os

data_file = "hata.csv"


def import_data(data_file):
    inv_data = csv.reader(open(data_file, "r"))
    for row in inv_data:
        var1 = row[0]
        # do more stuff

        pdf_file = os.path.abspath("~/Desktop/%s.pdf" % var1)
        generate_pdf(variable, pdf_file)


def generate_pdf(variable, file_name):

    c = canvas.Canvas(file_name, pagesize=letter)

    # do some stuff with my variables
    c.setFont("Helvetica", 40, leading=None)
    c.drawString(150, 2300, var1)

    c.showPage()
    c.save()

import_data(data_file)

所以这个程序可以完美地工作,并且保存/创建我想要的PDF文件,但是它是保存在脚本目录中的。我希望能将其保存到桌面等其他目录。

当我查找并找到os.path.abspath时,我认为我解决了它;但是我收到了以下错误信息:

File "/usr/local/lib/python3.4/site-packages/reportlab/pdfbase/pdfdoc.py", line 218, in SaveToFile
    f = open(filename, "wb")
FileNotFoundError: [Errno 2] No such file or directory: '/Users/TARDIS/Desktop/tests/~/Desktop/00001.pdf'

这告诉我它试图从我的脚本所在的主文件夹开始保存。我如何让它看到外面的内容?

2个回答

12

经过多次尝试使用不同的方法,都存在缺点,我想出了一种解决方案并在此发布以供后人参考。因为我是新手程序员,所以如果这对经验更丰富的人来说很明显,我就道歉。

首先,我给我的pdf文件命名:

pdf_name = number + ".pdf"

然后,我找到当前用户桌面的路径(假设我不知道用户名是什么,这就是问题的根源),并创建了一个路径,以便可以将PDF文件保存在其中。

save_name = os.path.join(os.path.expanduser("~"), "Desktop/", pdf_name)

最后,这将传递给我的PDF生成函数:

...
    save_name = ....
    generate_pdf(variable, save_name)

def generate_pdf(variable, save_name):

    c = canvas.Canvas(save_name, pagesize=letter)
....

就是这样。


0

是的,它对我有用...我必须将reportlab pdf保存在下载文件夹中,而不是应用程序文件夹中。我只是使用上面的代码,它有效,谢谢你

pdf_name = "XYZ"+".pdf"


save_name = os.path.join(os.path.expanduser("~"), "Desktop/", pdf_name)

doc = SimpleDocTemplate(save_name)

1
这似乎不是一个答案,应该被删除。请不要在答案部分发表评论或感谢信息。 - moken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接