Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to save (store) PDF file generated by weasyprint to specified directory?

I need my pdf files that is generated by weasyprint to be some specified folder, for example in the folder "my_project/pdf_files/"

NOTE: I am using django framework for my project. And here is the structure of project.

my_project/

----pdf_generator_app/

--------admin.py

--------models.py

--------views.py

pdf_files/

Currently I have this in my views.py

def generate(student_id):
    student = get_object_or_404(Student, application_id=student_id)
    html = render_to_string('contract.html', {'student': student})
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'filename="some_file.pdf"'
    weasyprint.HTML(string=html).write_pdf('myfile.pdf', 
                                           presentational_hints=True,
                                           stylesheets=[weasyprint.CSS(settings.STATIC_ROOT + '/css/styles.css')])
    return response

But this view does not store pdf file to a directory. It simply show file on browser. I need the file to be stored in the directory my_project/pdf_files/

like image 458
Kholdarbekov Avatar asked May 28 '17 06:05

Kholdarbekov


2 Answers

I wrote the out put to the binary mode and it worked.

dirname = os.path.dirname(__file__)


def hello_pdf():
    # Make a PDF straight from HTML in a string.
    html = render_template('template-1.html', name=name)

    pdf = HTML(string=html).write_pdf()

    if os.path.exists(dirname):

        f = open(os.path.join(dirname, 'mypdf.pdf'), 'wb')
        f.write(pdf)
like image 75
ali shirzad Avatar answered Sep 21 '22 22:09

ali shirzad


Oppsite to me, I got the PDF file but couldn't view it on my browser. Replace 'myfile.pdf' to an absolulte path and check if if generates the pdf file. It work for me in my condition.

like image 44
幽幽子的筷子 Avatar answered Sep 24 '22 22:09

幽幽子的筷子