return pdf-ответ от stdout с Django

Я использую wkhtmltopdf для создания PDF-файлов, как бы я не знал, как их правильно вернуть, поэтому мне пришлось записывать их в папку с медиа и затем перенаправлять только что созданный файл.

Изменить: совет Яна – написать STDOUT, поэтому я изменил команду wkhtmltopdf, чтобы сделать это, но теперь я не знаю, как вернуть этот контент.

Я пытаюсь использовать subprocess.Popen следующим образом:

r = HttpResponse(Popen(command_args), mimetype='application/pdf') r['Content-Disposition'] = 'filename=recibos.pdf' return r 

Но я не получаю хорошие результаты. Спасибо заранее.

    4 Solutions collect form web for “return pdf-ответ от stdout с Django”

    Вы должны открыть свою команду sub так:

     popen = Popen(command_args, stdout=PIPE, stderr=PIPE) body_contents = popen.stdout().read() popen.terminate() popen.wait() r = HttpResponse(body_contents, mimetype='application/pdf') 

    Некоторые вещи должны быть осторожны:

    1. Если ваша команда popen'd записывает в STDERR, это может зайти в тупик. Вы можете решить эту проблему, используя функцию connect () объекта Popen.
    2. Вы должны попробовать / наконец, чтобы убедиться, что всегда terminate () и wait ().
    3. Это загружает весь PDF в память вашего процесса python, вы можете передать байты из команды в исходящий сокет.

    Я не могу быть окончательным, потому что у меня есть только genereated .PDF ответы в PHP, однако основная идея будет такой же.

    1) Напишите свой файл pdf в STDOUT, а не в файловую систему, так же, как вы хотели бы вернуть любой другой тип страницы.

    2) Отправьте затем с правильным типом MIME и заголовками. Это скорее:

    Content-Disposition: inline; filename = "MyReportFile.pdf" Тип контента: application / pdf

    Возможно, вам нужно будет также проверить заголовки Chache-Control и Expires, чтобы получить нужное вам поведение.

    Как вы хотите, чтобы они вернулись?

    Если вы хотите, чтобы они были вложением, вы можете попробовать:

     fname = #something here to give dynamic file names from your variables response = HttpResponse(mimetype='application/pdf') response['Content-Disposition'] = 'attachment; filename='+fname return response 

    Мне жаль, что у меня не было ответа на вопрос о том, как открыть pdf-файл в браузере, но это фрагмент из проекта, который я сделал некоторое время назад, и я забыл некоторые детали.

    Если вы просто хотите вернуть PDF как Django HttpResponse:

     from django.http import HttpResponse def printTestPdf(request): return printPdf('/path/to/theFile.pdf') def printPdf(path): with open(path, "rb") as f: data = f.read() return HttpResponse(data, mimetype='application/pdf') 
     
    Interesting Posts for Van-Lav

    Более быстрый способ чтения пикселя экрана в Python, чем PIL?

    Pyqt; QTcpSocket всегда в connectionState после перезапуска сервера;

    Как получить текущие пути импорта в Python?

    Использование селена в календаре выбора даты

    sqlite: проверка блокировки чтения / записи

    Перенаправление вывода консоли в строку Python

    virtualenv: команда не найдена после установки с помощью Pip на Mac

    sendMessage извне в autobahn работает в отдельной ветке

    В SQLAlchemy, как я могу определить событие для запуска DDL с использованием декларативного синтаксиса?

    Как я могу сгенерировать все возможные IP-адреса из списка диапазонов ip в Python?

    Есть ли способ рисовать примитивы в 3D с Python?

    Почему я получаю ошибку сокета низкого уровня при использовании библиотеки python Fabric?

    Исключительный срок: Неожиданное поведение. NaNs

    Как автоматически удалить запись в соответствии с датой окончания в django

    Преобразование данных Json в Python DataFrame

    Python - лучший язык программирования в мире.