分享

Python PDF 之 pisa 及 中文问题

 MikeDoc 2012-01-27
Python Pisa HTML2PDF 


官方网站: 
  django reportlab: http://docs./en/dev/howto/outputting-pdf/ 
  pisa: http://pypi./pypi/pisa/3.0.10 


Pisa Views 代码: 
Java代码  收藏代码
  1. ########PDF##########################################  
  2. #Doc  
  3. #http://www.20seven.org/journal/2008/11/pdf-generation-with-pisa-in-django.html  
  4. #http://go3.daili39.com/browse.php?u=025a56434191163d635T2k4dlltRjZZV0Z5TG14aGRXNWphSEJoWkM1dVpYUXZKVGRGY0dGelkyRnNMV0poWTJndkpUSkNhblZ1YXk5d2FYTmhMMlpwYkdWekwyaGxZV1FsTTBFdmNHbHpZVE12&b=1  
  5. #http://pypi./pypi/pisa/3.0.27  
  6. #安装依赖  
  7. #easy_install reportlab  
  8. #easy_install html5lib  
  9. #返回PDF  
  10. def pdf(request):  
  11.     html = 0  
  12.     if html:  
  13.         return render_to_response('dfiles/report.html', {  
  14.             'username' : " 柳争 ","content":"AA"20  
  15.             }, context_instance=RequestContext(request))  
  16.     else:  
  17.         return write_pdf('dfiles/report.html',{  
  18.             'pagesize' : 'A4',  
  19.             'article' : "LIUZHEBG","content":"AA"20})  
  20.   
  21. #生成PDF  
  22. def write_pdf(template_src, context_dict):  
  23.     template = get_template(template_src)  
  24.     context = Context(context_dict)  
  25.     html  = template.render(context)  
  26.     result = StringIO.StringIO()  
  27.   
  28.     #如果需要访问远程资源需要将远程资源读到本地,作为临时文件保存   
  29.     #读取方法:pisa.pisaLinkLoader(url).getFileName  
  30.   
  31.     pdf = pisa.pisaDocument(StringIO.StringIO(  
  32.         html.encode("UTF-8")), result,link_callback = pisa.pisaLinkLoader(url).getFileName)  
  33.       
  34.     #生成PDF  
  35.     if not pdf.err:  
  36.         return http.HttpResponse(result.getvalue(), \  
  37.              mimetype='application/pdf')  
  38.     else:  
  39.         return http.HttpResponse('error')  
  40.   
  41. #获得本地资源  
  42. def fetch_resources(uri, rel):  
  43.     path = os.path.join(settings.MEDIA_ROOT,uri.replace(settings.MEDIA_URL, ""))  
  44.     return path   


Pisa中文问题完美解决方案: 
将以下几行加入你的 Views 文件 
Java代码  收藏代码
  1. #########Set FONT (微软雅黑)#################  
  2. from reportlab.pdfbase import pdfmetrics  
  3. from reportlab.pdfbase.ttfonts import TTFont  
  4. pdfmetrics.registerFont(TTFont('msyh''path_to_your_font/msyh.ttf'))  
  5. from sx.pisa3 import pisa_default  
  6. pisa_default.DEFAULT_FONT["helvetica"]="msyh"  

其他方式: 
Pisa 中文问题: 
  1. 将 pisa/sx/pisa3/pisa_default.py 文件中的 
    #"helvetica": "Helvetica", 
    "helvetica": "msyh", 替换。 
  2. 在 pisa/sx/pisa3/__init__.py 中添加如下代码片段: 
     
Python代码  收藏代码
  1. from reportlab.pdfbase import pdfmetrics  
  2.       from reportlab.pdfbase.ttfonts import TTFont  
  3.       reportlab.rl_config.warnOnMissingFontGlyphs = 0  
  4.       pdfmetrics.registerFont(TTFont('msyh''path_to_your_font\msyh.ttf'))  

  3. 接下来运行程序就ok了。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多