Python Pisa HTML2PDF
官方网站: django reportlab: http://docs./en/dev/howto/outputting-pdf/ pisa: http://pypi./pypi/pisa/3.0.10
Pisa Views 代码:
- ########PDF##########################################
- #Doc
- #http:
- #http:
- #http:
- #安装依赖
- #easy_install reportlab
- #easy_install html5lib
- #返回PDF
- def pdf(request):
- html = 0
- if html:
- return render_to_response('dfiles/report.html', {
- 'username' : " 柳争 ","content":"AA"* 20
- }, context_instance=RequestContext(request))
- else:
- return write_pdf('dfiles/report.html',{
- 'pagesize' : 'A4',
- 'article' : "LIUZHEBG","content":"AA"* 20})
-
- #生成PDF
- def write_pdf(template_src, context_dict):
- template = get_template(template_src)
- context = Context(context_dict)
- html = template.render(context)
- result = StringIO.StringIO()
-
- #如果需要访问远程资源需要将远程资源读到本地,作为临时文件保存
- #读取方法:pisa.pisaLinkLoader(url).getFileName
-
- pdf = pisa.pisaDocument(StringIO.StringIO(
- html.encode("UTF-8")), result,link_callback = pisa.pisaLinkLoader(url).getFileName)
-
- #生成PDF
- if not pdf.err:
- return http.HttpResponse(result.getvalue(), \
- mimetype='application/pdf')
- else:
- return http.HttpResponse('error')
-
- #获得本地资源
- def fetch_resources(uri, rel):
- path = os.path.join(settings.MEDIA_ROOT,uri.replace(settings.MEDIA_URL, ""))
- return path
Pisa中文问题完美解决方案: 将以下几行加入你的 Views 文件
- #########Set FONT (微软雅黑)#################
- from reportlab.pdfbase import pdfmetrics
- from reportlab.pdfbase.ttfonts import TTFont
- pdfmetrics.registerFont(TTFont('msyh', 'path_to_your_font/msyh.ttf'))
- from sx.pisa3 import pisa_default
- pisa_default.DEFAULT_FONT["helvetica"]="msyh"
其他方式: Pisa 中文问题: 1. 将 pisa/sx/pisa3/pisa_default.py 文件中的 #"helvetica": "Helvetica", "helvetica": "msyh", 替换。 2. 在 pisa/sx/pisa3/__init__.py 中添加如下代码片段: - from reportlab.pdfbase import pdfmetrics
- from reportlab.pdfbase.ttfonts import TTFont
- reportlab.rl_config.warnOnMissingFontGlyphs = 0
- pdfmetrics.registerFont(TTFont('msyh', 'path_to_your_font\msyh.ttf'))
3. 接下来运行程序就ok了。
|