2017-01-23 2 views
0

У меня есть сценарий, который позволяет сгенерировать PDF-файл, а затем отправить его в другое приложение (LogicalDOC), чтобы сохранить его.Включить путь в имя файла при создании pdf

У меня проблема с payload линия. Имя файла должно быть моей переменной имени файла, но оно не учитывается.

Если я пишу filename.pdf, я нахожу filename.pdf в LogicalDOC с хорошим контентом.

Но имя файла должно автоматически меняться для каждого нового BirthCertificate.

Как я могу передать путь как имя файла?

Это мой сценарий:

@login_required 
def BirthCertificate_PDF(request, id) : 

    birthcertificate = get_object_or_404(BirthCertificate, pk=id) 

    data = {"birthcertificate" : birthcertificate} 

    template = get_template('BC_raw.html') 
    html = template.render(Context(data)) 


    filename_directory = str(BirthCertificate.objects.get(pk=id).lastname.encode('utf-8')) + "_" + str(BirthCertificate.objects.get(pk=id).firstname.encode('utf-8')) + "_" + str(BirthCertificate.objects.get(pk=id).birthday) 
    filename = 'Acte_Naissance_' + filename_directory + '.pdf' 
    path = '/Users/valentinjungbluth/Desktop/Django/Individus/' + filename 

    file = open(path, "w+b") 
    pisaStatus = pisa.CreatePDF(html.encode('utf-8'), dest=file, encoding='utf-8') 

    file.seek(0) 
    pdf = file.read() 
    if pdf : 

     payload = '{ "language":"fr","fileName":filename,"folderId":3309569 }' 
     upfile = path 
     files = { 
     'document': (None, payload, 'application/json'), 
     'content': (os.path.basename(upfile), open(upfile, 'rb'), 'application/octet-stream') 
     } 
     url = 'http://localhost:8080/services/rest/document/create' 
     headers = {'Content-Type': 'multipart/form-data'} 
     r = requests.post(url, files=files, headers=headers, auth=('admin', 'admin')) 

     context = {"birthcertificate":birthcertificate, 
        "path":path} 

     return render(request, 'BC_PDF.html', context) 
    file.close() 

    return HttpResponse(pdf, 'application/pdf') 

Если бы я писал:

  • "FileName":"test.pdf" я получить файл test.pdf в logicalDoc (смотри рисунок)
  • "FileName":"filename" я получить файл имя файла с неизвестный формат в logicalDoc (см. рисунок)

Я хотел бы получить мой filename variable в качестве имени документа

enter image description here

+0

Я заполнил форму с информацией: фамилия, возраст, пол, ... и создаю pdf-файл, который берет все данные из моей формы. Затем этот файл PDF сохраняется на моем сервере, и я хочу импортировать этот документ в LogicalDOC. Имя файла, которое предоставляется моему файлу в LogicalDOC, должно быть таким же, как сохранение имени файла на моем сервере. По-видимому, 'FileName' принимает только что-то вроде:' try.pdf', а не путь:/ – Deadpool

+0

Если я правильно понял, вы могли бы использовать формат: 'payload = '{{" language ":" fr "," fileName ": {0 }, "folderId": 3309569}} '. format (filename) '. Теперь переменная 'payload' будет содержать имя файла. Это то, что вам нужно? – neverwalkaloner

+0

@neverwalkaloner Извините, но не работает. Я хотел бы получить имя файла в LogicalDoc переменной имени файла. Например: 'Acte_Naissance_Test_Muriel_2011-09-11.pdf', поскольку я написал переменную имени файла. '{0}' не работает. Кажется, что 'fileName' не принимает переменную учетной записи:/ – Deadpool

ответ

1

Вы можете использовать строку форматирования для этого. Просто выполните следующие действия:

payload = '{{ "language":"fr","fileName":"{0}","folderId":3309569 }}'.format(filename) 
+0

Спасибо! Как я и предположил, он пропустил '' '' 'вокруг '{0}' – Deadpool

+0

@ Valentin Yep, я пропустил его. Добро пожаловать:) – neverwalkaloner

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