Мне нужно, чтобы мои pdf файлы, сгенерированные weasyprint , были указанной папкой, например, в папке " my_project / pdf_files / ".

ПРИМЕЧАНИЕ: я использую фреймворк django для своего проекта. А вот и структура проекта.

my_project/

----pdf_generator_app/

--------admin.py

--------models.py

--------views.py

pdf_files/

В настоящее время у меня есть это в моем 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

Но это представление не сохраняет файл PDF в каталог. Это просто показать файл в браузере. Мне нужно, чтобы файл был сохранен в каталоге my_project / pdf_files / .

4
UMAR 28 Май 2017 в 09:58

2 ответа

Лучший ответ

Напротив, я получил файл PDF, но не смог просмотреть его в своем браузере. Замените «myfile.pdf» на абсолютный путь и проверьте, генерирует ли pdf файл. Это работает для меня в моем состоянии.

1
幽幽子的筷子 2 Июн 2017 в 07:50

Я записал вывод в двоичный режим, и он работал.

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)
1
ali shirzad 6 Авг 2017 в 11:33