I'm going crazy here to implement a reporting system for .docx files. I read several examples of streaming a file (like CSV outputs and such), but they were all from the controller. Since there will be several report formats for my application, I wanted to move all the reports to the views. I SWEAR I had it working and then fouled it up somehow.
Here's what works. *controllers/sale.py* @auth.requires_login() def test5(): from docx import Document from docx.shared import Inches import StringIO output = StringIO.StringIO() document = Document() sales = db(db.sale.property==db.property.id).select() document.add_heading('Sales', 0) response.headers['Content-Type']= 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' response.headers['Content-Disposition'] = "attachment; filename=Comparable Sales.docx" response.write(output.getvalue(), escape=False) document.save(output) return output.getvalue() It produces a .docx file. No data yet, but just a file with the heading caption that reads, "Sales." Then, I tried splitting stuff up a bit. *controllers/sale.py* @auth.requires_login() def test4(): response.view = 'default/test2.html' return locals() *views/default/test2.html* {{ from docx import Document from docx.shared import Inches import StringIO output = StringIO.StringIO() document = Document() sales = db(db.sale.property==db.property.id).select() document.add_heading('Sales', 0) response.headers['Content-Type']= 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' response.headers['Content-Disposition'] = "attachment; filename=Comparable Sales.docx" document.save(output) response.write(output.getvalue(), escape=False) }} With the split-up deal, it downloads fine. When I open it, Word alerts me first, "The file Comparable Sales.docx cannot be opened because there are problems with the contents." I click OK and get: "Word found unreadable content in Comparable Sales.docx. Do you want to recover the contents of this document?" I click OK and it opens with the correct content. I've tried several variations, such as moving the sales query to the controller, removing the Content-Disposition header, etc. No luck. I've tried comparing the underlying document.xml files, but I don't notice any notable differences. I've validated and checked for errors. So, clearly I'm very close if it's actually getting the content, but what have I done that keeps making it corrupt? -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.