2

Python Reportlab

我在打印我pdf喜欢的特殊字符时遇到问题"&"

# -*- coding: utf-8 -*-
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.rl_config import defaultPageSize
from reportlab.lib.units import inch

styles = getSampleStyleSheet()

def myFirstPage(canvas, doc):
  canvas.saveState()

def go():
  doc = SimpleDocTemplate("phello.pdf")
  Story = [Spacer(1,2*inch)]
  Story.append(Paragraph("Some text", styles["Normal"]))
  Story.append(Paragraph("Some other text with &", styles["Normal"]))
  doc.build(Story, onFirstPage=myFirstPage) 

go()

我期望以下输出

 Some text
 Some other text with &

但我得到的输出是

 Some text
 Some other text with

'&' 在哪里消失了。

我已经搜索了一些论坛,它们说我需要将其编码为&但没有比编码每个特殊字符更简单的方法来处理这个问题吗?

我已"# -*- coding: utf-8 -*-"在脚本顶部添加,但这并不能解决我的问题

4

1 回答 1

6

您应该将 &、< 和 > 替换为&amp;&lt;&gt;。一种简单的方法是 Python 转义函数:

from cgi import escape
Story.append(Paragraph(escape("Some other text with &"), styles["Normal"]))

但是,HTML 标记需要有真正的 < 和 >,所以典型的用法更像是:

text = "Some other text with &"
Story.append(Paragraph(escape("<b>" + text + "</b>"), styles["Normal"]))
于 2013-11-01T02:30:27.497 回答