Задать вопрос
@sd12
Проектировщик ИС и Веб-разработчик

Как можно формировать pdf документы на Django?

Подскажите пожалуйста, с помощью какой библиотеки или прочих средств можно реализовать функцию создания документа готовой к печати. Необходимо чтобы формировался документ, имеющий определенную форму, который заполняется данными из БД. В PHP я вроде слышал, что есть такое что-то. А вот для Django (именно чтобы документ можно было сформировать по нажатию кнопки на сайте, который написан на Django) что-то не знаю ничего подобного. Вообще реально ли это? :) Спасибо
  • Вопрос задан
  • 2992 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Пригласить эксперта
Ответы на вопрос 3
syschel
@syschel
freelance/python/django/backend
Мой пример функции генерации PDF на основании передачи html шаблона и контекста(данные из базы данных).
xhtml2pdf
from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context
import cStringIO as StringIO
import xhtml2pdf.pisa as pisa

def render_to_pdf(template_src, context_dict, filename='contract.pdf'):
    """ Отдаю PDF файл """
    template = get_template(template_src)
    context = Context(context_dict)
    html = template.render(context)
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(
        StringIO.StringIO(html.encode('utf-8')),
        result,
        encoding='UTF-8',
        show_error_as_pdf=True
    )
    if not pdf.err:
        response = HttpResponse(result.getvalue(), content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename=%s' % filename
        return response
    return HttpResponse(u'We had some errors!')

def contract_text(request):
    text = ContractText.objects.filter(user=request.user)
    return render_to_pdf('pfd_template.html', {'text': text}, 'new_contract.pdf')
Ответ написан
Комментировать
zelsky
@zelsky
Я писал спец стили . Вот когда жмяк ctrl + p то получаешь документ готовый к печати.
https://www.smashingmagazine.com/2011/11/how-to-se...
Ответ написан
Комментировать
GrossFinger
@GrossFinger
1. Сформировать или открыть готовый и подредактировать с помощьюлюбы python-docx
2. Сохранить во временный файл
3. Позвать консольную команду https://wiki.ubuntuusers.de/unoconv/ для временного файла
4. Отдать в стриме получившуюся pdf
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы