我正在尝试使用xhtml2pdf从html页面创建一个pdf ..在转换它时,我的终端显示以下错误消息..
错误TypeError:' NotImplementedType'对象不可迭代意味着什么?
我该如何防止这种情况?以下示例代码是使用....转换pdf
<html>
<head>
<style type="text/css">
@page
{
@top-right
{
content: "Page " counter(page);
}
}
</style>
</head>
<body>
test
</body>
</html>
并使用以下命令行进行pdf转换..
xhtml2pdf test.html test.pdf
在那次转换中,我早早就说错了。我该怎么办?
答案 0 :(得分:0)
这看起来是xhtml2pdf中的一个错误。
运行命令行时得到的回溯如下:
Traceback (most recent call last):
File "C:\Python27\Scripts\xhtml2pdf-script.py", line 9, in <module>
load_entry_point('xhtml2pdf==0.0.6', 'console_scripts', 'xhtml2pdf')()
File "build\bdist.win32\egg\xhtml2pdf\pisa.py", line 146, in command
File "build\bdist.win32\egg\xhtml2pdf\pisa.py", line 363, in execute
File "build\bdist.win32\egg\xhtml2pdf\document.py", line 89, in pisaDocument
File "build\bdist.win32\egg\xhtml2pdf\document.py", line 57, in pisaStory
File "build\bdist.win32\egg\xhtml2pdf\parser.py", line 685, in pisaParser
File "build\bdist.win32\egg\xhtml2pdf\context.py", line 498, in parseCSS
File "build\bdist.win32\egg\xhtml2pdf\w3c\cssParser.py", line 434, in parse
File "build\bdist.win32\egg\xhtml2pdf\w3c\cssParser.py", line 533, in _parseStylesheet
File "build\bdist.win32\egg\xhtml2pdf\w3c\cssParser.py", line 654, in _parseAtKeyword
File "build\bdist.win32\egg\xhtml2pdf\w3c\cssParser.py", line 758, in _parseAtPage
TypeError: 'NotImplementedType' object is not iterable
稍微深入研究一下代码,问题似乎就在这里,w3c/cssParser.py
if src.startswith('@'):
# @media, @page, @font-face
src, atResults = self._parseAtKeyword(src)
if atResults is not None:
stylesheetElements.extend(atResults) # this is line 758
_parseAtKeyword(src)
会返回一个包含src
和NotImplemented
的2元组,用于任何无法识别的CSS关键字,尤其是@top-right
。这会导致以下行中的extend
失败,因为NotImplemented
不是extend
的有效参数。
@top-right
我不熟悉,我找不到css @top-right
的任何Google搜索结果。如果我将@top-right
替换为@topright
,我会得到相同的行为,如果我将@top-right
替换为top-right
,则代码似乎会进入无限循环。所以我对xhtml2pdf的CSS解析器并没有特别深刻的印象。
用
替换第757行 if atResults is not None and atResults is not NotImplemented:
似乎让xhtml2pdf足以将您的测试文档转换为PDF。但是,它产生的输出可能不是您所希望的。
我怀疑在这里做的最好的事情就是发布在xhtml2pdf mailing list。