CSS parsing error when creating pdf with xhtml2pdf pisa.CreatePDF()

css, html, pdf, python, xhtml2pdf

Solution

The problem you are hitting is completely unrelated to the error, but still involves your CSS.

Comments in CSS are created using `/*` and `*/`, not `#` like in Python. If you remove the "comments" from your file, it is parsed and created by pisa. This is also why your single line example worked, they weren't included.

Problem

I am following the `xhtml2pdf` guides. I have used one of the sample html files and saved as test.html: ``` <html> <head> <style> @page { size: a4 portrait; @frame header_frame { # Static Frame -pdf-frame-content: header_content; left: 50pt; width: 512pt; top: 50pt; height: 40pt; } @frame content_frame { # Content Frame left: 50pt; width: 512pt; top: 90pt; height: 632pt; } @frame footer_frame { # Another static Frame -pdf-frame-content: footer_content; left: 50pt; width: 512pt; top: 772pt; height: 20pt; } } </style> </head> <body> <!-- Content for Static Frame 'header_frame' --> <div id="header_content">Lyrics-R-Us</div> <!-- Content for Static Frame 'footer_frame' --> <div id="footer_content">(c) - page <pdf:pagenumber> of <pdf:pagecount> </div> <!-- HTML Content --> To PDF or not to PDF </body> </html> ``` I then read in this file as a string and attempt to create a pdf: ``` with open('test.html','r') as f: sourceHtml = f.read() outputFilename = "test.pdf" resultFile = open(outputFilename , "w+b") pisaStatus = pisa.CreatePDF(sourceHtml,dest=resultFile) resultFile.close() ``` However, I get the following error traceback: ``` Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\site-packages\xhtml2pdf\document.py", line 89, in pisaDocument encoding, context=context, xml_output=xml_output) File "C:\Python27\lib\site-packages\xhtml2pdf\document.py", line 57, in pisaStory pisaParser(src, context, default_css, xhtml, encoding, xml_output) File "C:\Python27\lib\site-packages\xhtml2pdf\parser.py", line 660, in pisaParser context.parseCSS() File "C:\Python27\lib\site-packages\xhtml2pdf\context.py", line 428, in parseCSS self.css = self.cssParser.parse(self.cssText) File "C:\Python27\lib\site-packages\xhtml2pdf\w3c\cssParser.py", line 431, in parse src, stylesheet = self._parseStylesheet(src) File "C:\Python27\lib\site-packages\xhtml2pdf\w3c\cssParser.py", line 530, in _parseStylesheet src, atResults = self._parseAtKeyword(src) File "C:\Python27\lib\site-packages\xhtml2pdf\w3c\cssParser.py", line 650, in _parseAtKeyword src, result = self._parseAtPage(src) File "C:\Python27\lib\site-packages\xhtml2pdf\w3c\cssParser.py", line 746, in _parseAtPage src, atResults = self._parseAtKeyword(src) File "C:\Python27\lib\site-packages\xhtml2pdf\w3c\cssParser.py", line 657, in _parseAtKeyword src, result = self._parseAtFrame(src) File "C:\Python27\lib\site-packages\xhtml2pdf\w3c\cssParser.py", line 766, in _parseAtFrame src, properties = self._parseDeclarationGroup(src.lstrip()) File "C:\Python27\lib\site-packages\xhtml2pdf\w3c\cssParser.py", line 1017, in _parseDeclarationGroup raise self.ParseError('Declaration group closing \'}\' not found', src, ctxsrc) xhtml2pdf.w3c.cssParser.CSSParseError: Declaration group closing '}' not found:: (u'{ ', u'# Static Frame\n ') ``` This seems to imply that there is a missing `}` in the css code. However it seems fine to me. I am using windows so I thought it might be to do with `\r\n` line EOLs - but it isn't. Can anyone see what I'm doing wrong?

Original source