Python_reportlab教程.pdf
让我们进入中文的处理过程吧。
原本看到 ReportLab 的 test 目录下有一个 test_multibyte_chs.py ,试了试效果不错,就以为中文问题照猫画虎应该没什么问题呀。但等我再仔细深入后,发现问题不那么简单。
问题一:无法使用Paragraph。因示例中使用的是底层的API,因此对于字体要求不高。而使用Paragraph需要知道粗体、斜体、粗斜体这些字体,而示例中并没有这样的处理。
问题二:在解了上面的问题之后,发现中文只有一种字体,实现不了斜体和粗体效果。
现在我已经基本解决了上面的问题,但是无法实现斜体和粗斜体,这个以后再看一看吧。
这种方法使用直接处理TrueType字体的方法,但在测试过程中速度有些慢。但好处是可以使用中文的字体文件,当然需要是ttf格式的文件。这样可以引入更多的字体了。代码如下:
- #coding=utf-8
- import reportlab.rl_config
- reportlab.rl_config.warnOnMissingFontGlyphs = 0
- from reportlab.pdfbase import pdfmetrics
- from reportlab.pdfbase.ttfonts import TTFont
- from reportlab.pdfgen import canvas
- pdfmetrics.registerFont(TTFont(’song’, ‘SURSONG.TTF’))
- pdfmetrics.registerFont(TTFont(‘hei’, ‘SIMHEI.TTF’))
- from reportlab.lib import fonts
- fonts.addMapping(’song’, 0, 0, ’song’)
- fonts.addMapping(’song’, 0, 1, ’song’)
- fonts.addMapping(’song’, 1, 0, ‘hei’)
- fonts.addMapping(’song’, 1, 1, ‘hei’)
- import copy
- from reportlab.platypus import Paragraph, SimpleDocTemplate, PageBreak
- from reportlab.lib.styles import getSampleStyleSheet
- stylesheet=getSampleStyleSheet()
- normalStyle = copy.deepcopy(stylesheet['Normal'])
- normalStyle.fontName =’song’
- normalStyle.fontSize = 20
- story = []
- story.append(Paragraph(‘<b>你好</b>,中文’, normalStyle))
- doc = SimpleDocTemplate(‘hello.pdf’)
- doc.build(story)
上面的处理可以解决正常和粗体的字形,但斜体还是无法支持,但已经好多了。而且好处是可以使用其它的中文字体比如仿宋了,彩云体了。
阅读(11646) | 评论(0) | 转发(0) |