dalanmiller
dalanmiller

Reputation: 3672

Creating pdfs in Python with Pisa / xhtml2pdf

I know there are a lot of questions based on pdf creation in Python but I haven't seen anything based on creating pdfs with Pisa or xhtml2pdf.

Here is my code.

pisa.pisaDocument(cStringIO.StringIO(a).encode('utf-8'),file('mypdf.pdf','wb'))

and then

pisa.startViewer('mypdf.pdf')

I assembled this over a couple different tutorials and examples but every single thing that I've tried always results in the pdf being corrupted and I get this message when trying to open the pdf.

"Adobe Reader could not open 'awesomer.pdf' because it is either not a supported file type or because the file has been damaged (for example, it was sent as an email attachment and wasn't correctly decoded)."

This message occurs even when I don't use the .encode('utf-8') on the string.

What am I doing wrong? Does the encoding on my Mac have to do with this?

Upvotes: 2

Views: 7166

Answers (2)

Krzysztof Rosiński
Krzysztof Rosiński

Reputation: 51

I'd suggest closing the file manually, had a simmilar problem. Try this:

f = file('mypdf.pdf', 'wb')
pisa.pisaDocument(cStringIO.StringIO(a).encode('utf-8'),f)
f.close()

Upvotes: 5

stevebot
stevebot

Reputation: 24005

I recommend doing the following:

pdf = pisa.pisaDocument(cStringIO.StringIO(a).encode('utf-8'),file('mypdf.pdf','wb'))
if pdf.err:
     print "*** %d ERRORS OCCURED" % pdf.err 

And then see what the error output is.

I'm not sure what string you are encoding but this might also help:

pdf = pisa.pisaDocument(cStringIO.StringIO(html.encode(a)).encode('utf-8'),file('mypdf.pdf','wb'))

It depends on if a needs to be html encoded

Upvotes: 1

Related Questions