系统前提:
-
系统环境:
前端Angularjs,后端tornado,数据库sqlite3。
-
系统介绍:
我有一个要实现套打功能的业务系统,通过针式打印机打印证件。目前思路是通过生成pdf文件来打印,不需要第三方控件,也不挑浏览器,目前支持H5的浏览器都能够直接显示pdf。
self.set_header("Content-Type", "application/pdf")
效果非常好,客户非常认可。
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的换行符不是n导致的呢