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.

Reply via email to