2012-03-27 62 views
0

我正在使用Django和Reportlab生成PDF文件。有時用戶會使用ReportLab的決定是無效字符,我得到這樣的:在一段XML解析器錯誤(假<或&)...Reportlab不處理&和<

有沒有什麼辦法:

ValueError異常避免這一點,而不是限制用戶的輸入?

下面是代碼的精簡版:

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") 

回答

1

我從來沒有直接用過ReportLab的,但是基於錯誤信息應該是簡單的將這些字符爲HTML實體。

下面是關於如何使用Python CGI庫快速,輕鬆地做到這一點的快速指南: http://wiki.python.org/moin/EscapingHtml

或者,也許因爲它似乎ReportLab的是沿途生成XML的XML特定版本會稍微好一點這就是它破壞的地方(儘管大多數字符實體是共享的) http://wiki.python.org/moin/EscapingXml

0

我在創建標題之前遇到了&字符問題。

我解決它通過執行以下操作:

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

或許你可以嘗試:

from cgi import escape 
p = Paragraph(escape(line), style) 

希望這有助於!