2017-01-23 5 views
0

PDFファイルを生成して別のアプリケーション(LogicalDOC)に送信して保存するスクリプトがあります。pdfを作成するときにfilenameにインクルードパスを設定する

​​行に問題が発生しました。ファイル名は私のファイル名変数でなければならないが、考慮していない。

もし私がfilename.pdfと書くと、良い内容のLogicalDOCでfilename.pdfが見つかりました。

ただし、ファイル名は新しい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"を私はlogicalDocでtest.pdfというファイルを取得(写真参照)
  • "FileName":"filename"私はとファイル名のファイルを取得しますlogicalDocで不明な形式(画像参照)

私はあなたがこのためのフォーマット文字列を使用することができ、文書名として

enter image description here

+0

フォームには、姓、年齢、性別などの情報が入力されました。フォームからすべてのデータを取得するPDFファイルを作成します。次に、このpdfファイルが私のサーバーに保存され、LogicalDOCでこの文書をインポートします。 LogicalDOCで私のファイルに与えられるファイル名は、私のサーバ上のファイル名を保存するものと同じでなければなりません。どうやら、 'FileName'は' try.pdf'のようなものだけで、パスはありません:/ – Deadpool

+0

私が正しく理解していれば、 'payload = '{{" language ":" fr "、" fileName ":{0 }、 "folderId":3309569}} '。書式(ファイル名) '。これで 'payload'変数にfilenameが入ります。それはあなたが必要とするものですか? – neverwalkaloner

+0

@neverwalkaloner申し訳ありませんが動作しません。 LogicalDocのファイル名変数としてファイル名を取得したいと思います。たとえば、私がファイル名変数を書いたときに 'Acte_Naissance_Test_Muriel_2011-09-11.pdf'とします。 '{0}'は機能しません。 'fileName'はアカウント変数をとらないようです:/ – Deadpool

答えて

1

を私filename variableを取得したいと思います。次のようにしてください:

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

ありがとう!私が提案したように、 '{0}'の周りの '' 'を逃した@ – Deadpool

+0

@Valentinうん、私はそれを逃した。どういたしまして:) – neverwalkaloner

関連する問題