使用reportlab该如何实现中文段落换行?

发布于 2022-09-05 08:22:45 字数 2315 浏览 33 评论 0

系统前提:

  1. 系统环境:

    前端Angularjs,后端tornado,数据库sqlite3。
  2. 系统介绍:

    我有一个要实现套打功能的业务系统,通过针式打印机打印证件。目前思路是通过生成pdf文件来打印,不需要第三方控件,也不挑浏览器,目前支持H5的浏览器都能够直接显示pdf。
    self.set_header("Content-Type", "application/pdf")

    效果非常好,客户非常认可。

  3. pdf控件使用的是reportlab(点击进入官方网站),免费版没有好看的模板使用,收费版有很多漂亮模板,但是授权费用出奇的昂贵,不过好在套打系统不需要生成什么模板来使用。

遇到问题:

  • 我想实现中文段落自动换行,我的代码没有成功,各位有没有成功案例或者是思路给提供下。

# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.lib.units import mm, inch
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.graphics.barcode import code128
import reportlab.lib.styles
from cStringIO import StringIO
import time
import math
#...
#中文段落自动换行
def creat_wrap_string():
    pdfmetrics.registerFont(TTFont('msyh', 'msyh.ttf'))
    reportlab.lib.styles.ParagraphStyle.defaults['wordWrap'] = 'CJK'
    buffer = StringIO()
    # c = canvas.Canvas(buffer)
    c = canvas.Canvas('test.pdf')
    c.setPageSize((295.14 * mm, 207.26 * mm))
    style_sheet = getSampleStyleSheet()
    style = style_sheet['BodyText']
    style.fontName = 'msyh'
    style.fontSize = 11
    style.leading = 14
    style.firstLineIndent = 22
    Pa = Paragraph(
        '''
        多行文本测试一下。\n
        看看效果如何,是否可以自动换行。\n
        如果这样也可以的话那么就应该没有问题了\n
        程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试 程序测试
        '''
       , style)
    Pa.wrapOn(c, 6 * inch, 8 * inch)
    Pa.drawOn(c, 0, 5 * inch)
    Pa.drawOn
    c.showPage()
    c.save()
    # response.write()
    # pdf = buffer.getvalue()
    # buffer.close()
    # return pdf
    
creat_wrap_string()

然而代码并没有很好的换行

  生成pdf显示效果如下:

生成的pdf

如图所示,段落间并没有自动换行,如果要实现自动换行我该如何操作?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

无言温柔 2022-09-12 08:22:45

是不是pdf的换行符不是n导致的呢

帅气尐潴 2022-09-12 08:22:45

我也遇到相同问题,在reportlab表格中中文无法自动换行,请求大神解答。

々眼睛长脚气 2022-09-12 08:22:45

用<br/>换行

探春 2022-09-12 08:22:45

Report Lab使用 Report Lab XML 的一种语言来控制格式,和html有点类似,手动段落换行使用 <br/>

这是一段文字<br/>
这是另外一段<br/>

中文还需要设置 style.wordWrap = 'CJK' 让整段中文断句正确,实现自动换行。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文