2015-06-21 20 views
7

Używam pdfkit i wkhtmltopdf do generowania dokumentów PDF. Kiedy generuję pierwszy plik PDF, wszystko jest w porządku. Kiedy szybko (w ciągu 5 sekund) wygeneruję inny, otrzymam błąd [Errno 9] Bad descriptor pliku. Jeśli zamknę błąd (cofnę w przeglądarce) i ponownie go otworzę, utworzy on pdf.Python Django PDFKIT - [Errno 9] Niepoprawny deskryptor pliku

mój views.py

config = pdfkit.configuration(wkhtmltopdf='C:/wkhtmltopdf/bin/wkhtmltopdf.exe') 
pdfgen = pdfkit.from_url(url, printname, configuration=config) 
pdf = open(printname, 'rb') 

response = HttpResponse(pdf.read()) 
response['Content-Type'] = 'application/pdf' 
response['Content-disposition'] = 'attachment ; filename =' + filename 
pdf.close() 
return response 

Może ważna uwaga: biegnę tę stronę na IIS8, gdy uruchomiony z wiersza poleceń (python manage.py runserver) błąd nie występuje.

Wszelkie wskazówki dotyczące sposobu radzenia sobie z tym błędem będą świetne.

+0

Skąd pochodzi nazwa "printname"? –

+1

Najprawdopodobniej problem polega na tym, że adres URL jest odrzucany przez serwer sieciowy podczas próby szybkiego ponownego załadowania (za pośrednictwem adresu from_url) lub problemów z dostępem do pliku lokalnego, który próbujesz utworzyć. Możesz spróbować wyeliminować tę ostatnią, pisząc bezpośrednio do zmiennej, przekazując False jako nazwę pliku wyjściowego - np. pdf = pdfkit.from_url ('http://google.com', False) –

+0

Czy możesz wysłać dziennik serwera z przedziału czasu, gdy wystąpi błąd? (Wiem, że powiedziałeś, że nie ma tam żadnego błędu, po prostu mam pewne przeczucie i chcę zobaczyć informacje o żądaniach, aby się upewnić, że się nie mylę, zanim zaproponuję odpowiedź). – yuvi

Odpowiedz

6

Kiedy szybko (w ciągu 5 sekund) generował inne

Punkt ten sugeruje, że kod jest bez zarzutu, a problem leży po Twojej przeglądarce odrzucając URL jak sugeruje Piotr.

Najprawdopodobniej przyczyną błędu jest file buffer flush. Rozważ bufor do płukania w odpowiednich miejscach.

3

bez dalszych informacji przedstawionych zapowiadających, będę konwertować mój komentarz do odpowiedzi ...

Najprawdopodobniej problemy są, że adres URL jest odrzucony przez serwer WWW przy próbie szybkiego przeładowania (via from_url) lub masz problemy z dostępem do pliku lokalnego, który próbujesz utworzyć.

Możesz spróbować wyeliminować drugi, pisząc bezpośrednio do zmiennej, przekazując False jako nazwę pliku wyjściowego - np. pdf = pdfkit.from_url('google.com', False).

Jeśli to nie rozwiąże problemu, prawie na pewno twój serwer odrzuci adres URL - a więc musisz przejrzeć diagnostykę na tym serwerze.

Powiązane problemy