使用XPreformatted进行换行的reportlab问题 - 另外打印出问号

时间:2010-03-10 10:49:33

标签: reportlab

我正在使用XPreformatted打印一些预先格式化的文本,我有一个 换行问题。

换行符被正确翻译但另外我得到了 每行末尾的“问号”。

这是我的输出:

first line?
second line?
some more text

我正在使用django和mysql,数据库字段是一个简单的varchar 字段。

我在数据库中检查了一下“e”之间的一切 而“第一行第二行”中的“s”是一个新行字符。同 换行符我是指按下时在数据库中输入的内容 “输入”; - )

因此对我而言,新线路一方面似乎很奇怪 正确解释为新行,另外还有一个错误 问号。

希望在这里找到一些帮助 最好的祝福 汤姆

1 个答案:

答案 0 :(得分:1)

好的,我现在知道如何规避这种行为。我只是删除\ n之前的字符。它的字节字符13.因此我创建了一个gready修复算法来删除这个字符,我的pdf生成世界再次正常; - )

def repair_string_for_xpreformatted_use(value):
    #remove element before \n
    #it is an empty element interpreted from XPreformatted as a question mark
    #i guess this element is coming from the mysql db. test it with postgres db!
    #this is definitely a greedy repair algorithm

    lb_index = value.find('\n')
    start_index = 0
    end_index = len(value)
    value_rep = ""
    while lb_index != -1:
        lb_index = value.find('\n', 1)
        byte_list = toBytes(value[lb_index-1])
        if byte_list[0] == 13:
            #13 is the strange byte character which should not be there. remove it.. bye bye number 13
            value_rep += value[start_index:lb_index-1]
        else:
            #do not remove the character. we do not want to strip some user information ;-)
            value_rep += value[start_index:lb_index]

        value = value[lb_index:end_index]
        if lb_index == (end_index -1) or lb_index == end_index:
            lb_index = -1
        end_index = len(value)
    return value_rep

如何使用它:

from reportlab.platypus import XPreformatted
footerstyle = ParagraphStyle(name='footerstyle', leading=6, spaceBefore=0, spaceAfter=0, textColor=gray2, fontName='Calibri', fontSize=5, alignment=TA_RIGHT)
footer_text_rep = repair_string_for_xpreformatted_use(footer_text)
footer_text_pre = XPreformatted(smart_str(footer_text_rep), footerstyle)