2015-09-09 3 views
1

Мне интересно, как я могу сохранить свой сценарий на рабочем столе. Вот мой код:Python reportlab сохранить с холстом в указанное место

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' 

, который сообщает мне, что он пытается сохранить, начиная с домашней папки моего сценария. Как я могу увидеть это снаружи?

ответ

1

После долгих проб и ошибок с использованием различных методов, у которых были все недостатки, я придумал решение и решил, что отправлю его здесь для потомков. Я довольно новичок в программировании, так что извиняюсь, если это очевидно для более опытных.

Во-первых, я даю мой PDF-файл имя:

pdf_name = number + ".pdf" 

Затем я найти путь к Desktop для текущего пользователя (если учесть, что я не знаю, что имя пользователя будет, который был исходный корень проблемы) и создать путь к нему, чтобы можно было сохранить там 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) 
.... 

И это все.

Смежные вопросы