Вопрос

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

Редактировать: Совет IAN - это написать на STDOUT, поэтому я изменил мою команду whtmltopdf, чтобы сделать это, но теперь я не знаю, как вернуть этот контент.

Я пытался использовать подпроцесс. Распостен так:

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

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

Это было полезно?

Решение

Вы должны открыть вашу команду 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 пишет в Стдерр, он может тупик.Вы можете решить это с помощью функции Comment () на объекте POPON.
  2. Вы должны попробовать /, наконец, это, чтобы убедиться, что всегда расторгнуть () и ждать ().
  3. Это загружает весь PDF в память вашего Python Process, вы можете захотеть трансмировать байты из команды на исходящий сокет.

Другие советы

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

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

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

Удобрение контента: встроенный;filename="myreportfile.pdf" Тип содержимого: приложение / PDF

Вам может потребоваться проверить Cchache-Control и истекает заголовки, а также получить необходимое поведение.

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

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

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')
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top