Reportlab不处理&和<

时间:2012-03-27 19:45:20

标签: django reportlab

我正在使用Django和Reportlab生成pdf文件。有时用户会使用Reportlab认为无效的字符,我得到了这个:

ValueError:段落中的xml解析器错误(伪造<或&)

除了限制用户的输入外,还有什么方法可以避免这种情况吗?

这是代码的精简版本:

def generate_report(request, obj_id):

    obj = Model.objects.get(pk=obj_id)
    width, height = letter
    styles = getSampleStyleSheet()

    doc = SimpleDocTemplate(settings.MEDIA_ROOT + "/pdf/" + str(obj.id) + ".pdf", pagesize=letter,rightMargin=72,leftMargin=72,topMargin=160,bottomMargin=100)
    Story = []        

    Story.append('Title', h1))

    text = obj.test_to_display
    for line in text.splitlines():
        Story.append(Spacer(1,0.1*inch))
        p = Paragraph(line, style)
        Story.append(p)        

    doc.build(Story)

    return HttpResponseRedirect("/media/pdf/" + str(obj.id) + ".pdf")

2 个答案:

答案 0 :(得分:1)

我以前从未直接使用过ReportLab,但基于错误信息,将这些字符转换为html实体应该很简单。

以下是有关如何使用python cgi库快速轻松地执行此操作的快速指南: http://wiki.python.org/moin/EscapingHtml

或者xml特定版本可能稍好一些,因为看起来reportlab正在生成xml并且它正在破坏它(尽管大多数字符实体是共享的) http://wiki.python.org/moin/EscapingXml

答案 1 :(得分:0)

我遇到了& amp;的问题。创建标题之前的字符。

我通过以下方式解决了这个问题:

varchar2

也许你可以试试:

from cgi import escape
Paragraph(escape(self.name), self.styles['cover_subtitle'])

希望这有帮助!