2015-06-21 13 views
7

Uso pdfkit e wkhtmltopdf per generare documenti pdf. Quando genero il primo pdf tutto va bene. Quando rapidamente (entro 5 secondi) genera un altro, ottengo l'errore [Errno 9] Descrittore di file errato. Se chiudo l'errore (torna indietro nel browser) e apro di nuovo, creerà il pdf.Python Django PDFKIT - [Errno 9] Descrittore file errato

mia 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 

nota Forse importante: ho eseguito questo sito su IIS8, durante l'esecuzione da riga di comando (manage.py runserver python) l'errore non è presente.

Qualsiasi linea guida su come gestire questo errore sarebbe ottima.

+0

Da dove proviene 'printname'? –

+1

È probabile che il tuo URL venga rifiutato dal server web quando provi il ricaricamento rapido (tramite from_url) o che hai problemi ad accedere al file locale che stai cercando di creare. Puoi provare a eliminare quest'ultimo semplicemente scrivendo direttamente a una variabile passando False come nome del file di output, ad es. pdf = pdfkit.from_url ('http://google.com', False) –

+0

puoi pubblicare il log del server dall'intervallo di tempo quando si verifica l'errore? (So ​​che hai detto che non c'è nessun errore lì, ho solo un sospetto e voglio vedere le informazioni richieste per assicurarmi di non aver sbagliato prima di suggerire una risposta) – yuvi

risposta

6

Quando ho subito (entro 5 secondi) generare un altro

questo punto suggerisce che il codice è impeccabile e il problema si trova con il browser respingere l'URL, suggerisce Peter.

Molto probabilmente la causa dell'errore si trova con file buffer flush. Prendere in considerazione il tampone di lavaggio nei punti appropriati.

3

Senza ulteriori informazioni via-coming, mi converto il mio commento ad una risposta ...

Molto probabilmente sono i problemi che l'URL viene rifiutato dal server Web quando si tenta la ricarica rapida (tramite from_url) o problemi di accesso al file locale che stai cercando di creare.

Si potrebbe provare a eliminare il secondo semplicemente scrivendo direttamente a una variabile passando False come nome del file di output, ad es. pdf = pdfkit.from_url('google.com', False).

Se ciò non risolve il problema, il problema è quasi certamente con il server che rifiuta l'URL - e quindi è necessario guardare la diagnostica su quel server.