簡體   English   中英

ReportLab段落格式換行符

[英]ReportLab Paragraph Formatting Line Breaks

我是ReportLab的新手,我正在創建一個簡單的文檔,員工可以在其中將文本輸入網站上的文本區域,然后將其保存到數據庫中,然后從數據庫中提取出來,以通過ReportLab創建PDF。 我看到的問題是,如果用戶輸入的文本在2個段落之間包含換行符,則在創建PDF時不接受該換行符。

當我通過相同的Python腳本將文本內容直接從DB打印到屏幕上時,一切正確:

與普遍的看法相反,Lorem Ipsum不僅僅是簡單的隨機文本。 它起源於公元前45年的古典拉丁文學作品,距今已有2000多年的歷史。 理查德·麥克林托克(Richard McClintock)是弗吉尼亞州漢普頓-悉尼學院的拉丁文教授,他從洛勒姆·伊普森(Lorem Ipsum)段落中查找了一個較為晦澀的拉丁詞consectetur,並在古典文學中對該詞的引用進行了研究,發現了無疑的來源。 Lorem Ipsum出自西塞羅(Cicero)寫於公元前45年的《善惡之極》(De Finibus Bonorum et Malorum)的1.10.32和1.10.33節。 這本書是關於道德理論的論文,在文藝復興時期非常流行。 Lorem Ipsum的第一行“ Lorem ipsum dolor sit amet ..”來自第1.10.32節中的一行。

與普遍的看法相反,Lorem Ipsum不僅僅是簡單的隨機文本。 它起源於公元前45年的古典拉丁文學作品,距今已有2000多年的歷史。 理查德·麥克林托克(Richard McClintock)是弗吉尼亞州漢普頓-悉尼學院的拉丁文教授,他從洛勒姆·伊普森(Lorem Ipsum)段落中查找了一個較為晦澀的拉丁詞consectetur,並在古典文學中對該詞的引用進行了研究,發現了無疑的來源。 Lorem Ipsum出自西塞羅(Cicero)寫於公元前45年的《善惡之極》(De Finibus Bonorum et Malorum)的1.10.32和1.10.33節。 這本書是關於道德理論的論文,在文藝復興時期非常流行。 Lorem Ipsum的第一行“ Lorem ipsum dolor sit amet ..”來自第1.10.32節中的一行。

但是,在PDF中,它看起來像:

與普遍的看法相反,Lorem Ipsum不僅僅是簡單的隨機文本。 它起源於公元前45年的古典拉丁文學作品,距今已有2000多年的歷史。 理查德·麥克林托克(Richard McClintock)是弗吉尼亞州漢普頓-悉尼學院的拉丁文教授,他從洛勒姆·伊普森(Lorem Ipsum)段落中查找了一個較為晦澀的拉丁詞consectetur,並在古典文學中對該詞的引用進行了研究,發現了無疑的來源。 Lorem Ipsum出自西塞羅(Cicero)寫於公元前45年的《善惡之極》(De Finibus Bonorum et Malorum)的1.10.32和1.10.33節。 這本書是關於道德理論的論文,在文藝復興時期非常流行。 Lorem Ipsum的第一行“ Lorem ipsum dolor sit amet ..”來自1.10.32節中的一行。與普遍的看法相反,Lorem Ipsum並非簡單的隨機文本。 它起源於公元前45年的古典拉丁文學作品,距今已有2000多年的歷史。 理查德·麥克林托克(Richard McClintock)是弗吉尼亞州漢普頓-悉尼學院的拉丁文教授,他從洛勒姆·伊普森(Lorem Ipsum)段落中查找了一個較為晦澀的拉丁詞consectetur,並在古典文學中對該詞的引用進行了研究,發現了無疑的來源。 Lorem Ipsum出自西塞羅(Cicero)寫於公元前45年的《善惡之極》(De Finibus Bonorum et Malorum)的1.10.32和1.10.33節。 這本書是關於道德理論的論文,在文藝復興時期非常流行。 Lorem Ipsum的第一行“ Lorem ipsum dolor sit amet ..”來自第1.10.32節中的一行。

起初,我認為這是數據庫中的文本格式問題,但是在能夠在PDF創建之前正確打印出內容之后,我知道那不是問題。

我是否缺少該段落的簡單樣式輸入? 因為我還不了解ReportLab的所有來龍去脈,所以我有些失落。

這是腳本中的ReportLab代碼片段。 employeeQuestion1是在創建PDF之前以正確格式打印出來的內容。

def stylesheet():
    styles= {
        'default': ParagraphStyle(
            'default',
            fontName='SourceSansPro-Bold',
            fontSize=10,
            leading=12,
            leftIndent=0,
            rightIndent=0,
            firstLineIndent=0,
            alignment=TA_LEFT,
            spaceBefore=0,
            spaceAfter=0,
            bulletFontName='Times-Roman',
            bulletFontSize=10,
            bulletIndent=0,
            textColor= black,
            backColor=None,
            wordWrap=None,
            borderWidth= 0,
            borderPadding= 0,
            borderColor= None,
            borderRadius= None,
            allowWidows= 1,
            allowOrphans= 0,
            textTransform=None,
            endDots=None,         
            splitLongWords=1,
        ),
    }
    styles['employee_response'] = ParagraphStyle(
        'employee_response',
        parent=styles['default'],
        fontName='SourceSansPro-Regular',
        fontSize=10,
        spaceAfter=10,
        leftIndent=20
    )
    return styles

def build_flowables(stylesheet):
    return [
        Paragraph('{0}'.format(employeeQuestion1), stylesheet['employee_response']),
    ]

def build_pdf(filename, flowables):
    doc = SimpleDocTemplate(filename, 
        rightMargin=inch/2,
        leftMargin=inch/2,
        topMargin=inch/2,
        bottomMargin=inch/2,
        pagesize=letter,
    )

    doc.addPageTemplates(
        [
            PageTemplate(
                frames=[
                    Frame(
                        doc.leftMargin,
                        doc.bottomMargin,
                        doc.width,
                        doc.height,
                        id=None
                    ),
                ]
            ),
        ]
    )
    doc.build(flowables)
    build_pdf('/etc/review_app/reviews/{0}.pdf'.format(pdfFileName), build_flowables(stylesheet()))

謝謝您的幫助!

我通過將新行轉換為<br />標簽來解決此問題:

str(employeeQuestion1).replace('\n','<br />\n')

希望這對遇到同樣問題的人有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM