Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用xhtml2pdf pisa.CreatePDF()创建pdf时出现CSS分析错误_Python_Html_Css_Pdf_Xhtml2pdf - Fatal编程技术网

Python 使用xhtml2pdf pisa.CreatePDF()创建pdf时出现CSS分析错误

Python 使用xhtml2pdf pisa.CreatePDF()创建pdf时出现CSS分析错误,python,html,css,pdf,xhtml2pdf,Python,Html,Css,Pdf,Xhtml2pdf,我正在遵循xhtml2pdf 我使用了一个示例html文件并保存为test.html: <html> <head> <style> @page { size: a4 portrait; @frame header_frame { # Static Frame -pdf-frame-content: header_content; left: 50pt;

我正在遵循
xhtml2pdf

我使用了一个示例html文件并保存为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>
但是,我得到了以下错误回溯:

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     ')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
pisaDocument中第89行的文件“C:\Python27\lib\site packages\xhtml2pdf\document.py”
编码,上下文=上下文,xml\u输出=xml\u输出)
文件“C:\Python27\lib\site packages\xhtml2pdf\document.py”,第57行,在pisaStory中
pisaParser(src、上下文、默认css、xhtml、编码、xml输出)
pisaParser中的文件“C:\Python27\lib\site packages\xhtml2pdf\parser.py”,第660行
context.parseCSS()
文件“C:\Python27\lib\site packages\xhtml2pdf\context.py”,第428行,在CSS中
self.css=self.cssParser.parse(self.cssText)
文件“C:\Python27\lib\site packages\xhtml2pdf\w3c\cssParser.py”,第431行,在parse中
src,stylesheet=self.\u解析样式表(src)
文件“C:\Python27\lib\site packages\xhtml2pdf\w3c\cssParser.py”,第530行,在_parseStylesheet中
src,atResults=self.\u parseAtKeyword(src)
文件“C:\Python27\lib\site packages\xhtml2pdf\w3c\cssParser.py”,第650行,在_parseAtKeyword中
src,result=self.\u解析页面(src)
文件“C:\Python27\lib\site packages\xhtml2pdf\w3c\cssParser.py”,第746行,位于第页
src,atResults=self.\u parseAtKeyword(src)
文件“C:\Python27\lib\site packages\xhtml2pdf\w3c\cssParser.py”,第657行,在_parseAtKeyword中
src,result=self.\u parseAtFrame(src)
文件“C:\Python27\lib\site packages\xhtml2pdf\w3c\cssParser.py”,第766行,在_parseAtFrame中
src,properties=self.\u parseDeclarationGroup(src.lstrip())
文件“C:\Python27\lib\site packages\xhtml2pdf\w3c\cssParser.py”,第1017行,在_parseDeclarationGroup中
raise self.ParseError('DECLASSION group closing\'}'未找到',src,ctxsrc)
xhtml2pdf.w3c.cssParser.CSSParseError:未找到声明组关闭“}”:(u“{”,u“#静态帧\n”)
这似乎意味着css代码中缺少
}
。然而,我觉得这很好。我正在使用windows,因此我认为这可能与
\r\n
行EOL有关,但事实并非如此


有人知道我做错了什么吗?

当我将所有CSS定义放在一行中时,它不会出错:

<html>
<head>
<style>
    @page {size: a4 portrait; @frame header_frame {-pdf-frame-content: header_content; left: 50pt; width: 512pt; top: 50pt; height: 40pt;} @frame content_frame { left: 50pt; width: 512pt; top: 90pt; height: 632pt;} @frame footer_frame { -pdf-frame-content: footer_content; left: 50pt; width: 512pt; top: 772pt; height: 20pt;}}
</style>
</head>
...

@页面{大小:a4肖像;@frame header\u frame{pdf框架内容:header\u content;左:50pt;宽:512pt;顶:50pt;高:40pt;}@frame content\u frame{左:50pt;宽:512pt;顶:90pt;高:632pt;}@frame footer\u frame{pdf框架内容:footer\u content;左:50pt;宽:512pt;顶:772pt;高:20pt;}
...

请注意,如果我将它们分开,使每个定义都有单独的一行,它将挂起。

您遇到的问题与错误完全无关,但仍然涉及CSS


CSS中的注释是使用
/*
*/
创建的,而不是像Python中那样使用
.
。如果从文件中删除“注释”,则pisa将解析并创建该注释。这也是为什么您的单行示例有效,但没有包含它们。

该示例在一行上没有多个CSS属性定义,而您的行上有多个CSS属性定义。如果这是个问题的话,那将是一个令人沮丧的问题,但仍然值得一试。@Jongware你的意思是相反的吗?当我将所有CSS定义放在一行中时,它可以工作(
@page{…}
删除注释)。不管是哪种方式,谢谢你激励我去调查:-)。如果你愿意的话,贴出来作为答案——或者我会在一段时间内贴出来。相反?您的包含
左:50磅;宽度:512pt,该示例没有。如果这确实是问题所在,请随意将其作为答案发布,因为这只是我的猜测。您还可以为
xhtml2pdf
提交一个bug,因为这个符号不应该是致命的。好吧,也许这与我在
test.html
中阅读的方式有关。无论如何,谢谢。这确实与我假设的错误相反,而且最肯定的不是在线示例中显示的错误。你可能想对此提交一个bug。你能确认github上的示例CSS也不会工作吗?谢谢-我建议更新。
<html>
<head>
<style>
    @page {size: a4 portrait; @frame header_frame {-pdf-frame-content: header_content; left: 50pt; width: 512pt; top: 50pt; height: 40pt;} @frame content_frame { left: 50pt; width: 512pt; top: 90pt; height: 632pt;} @frame footer_frame { -pdf-frame-content: footer_content; left: 50pt; width: 512pt; top: 772pt; height: 20pt;}}
</style>
</head>
...