`

Python PDF 之 pisa 及 中文问题

阅读更多
Python Pisa HTML2PDF


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


Pisa Views 代码:
########PDF##########################################
#Doc
#http://www.20seven.org/journal/2008/11/pdf-generation-with-pisa-in-django.html
#http://go3.daili39.com/browse.php?u=025a56434191163d635T2k4dlltRjZZV0Z5TG14aGRXNWphSEJoWkM1dVpYUXZKVGRGY0dGelkyRnNMV0poWTJndkpUSkNhblZ1YXk5d2FYTmhMMlpwYkdWekwyaGxZV1FsTTBFdmNHbHpZVE12&b=1
#http://pypi.python.org/pypi/pisa/3.0.27
#安装依赖
#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了。

    
2
0
分享到:
评论

相关推荐

    Python-xhtml2pdfHTMLCSS转PDF工具

    Python中的`xhtml2pdf`库是一个非常实用的工具,它允许开发者将HTML和CSS内容转换为高质量的PDF文档。这个库广泛应用于自动化报告生成、网页保存为PDF、电子书制作等多个场景。以下是对`xhtml2pdf`的详细介绍以及与...

    PyPI 官网下载 | pisa-3.0.33.tar.gz

    在Python生态系统中,"pisa"的用途广泛,它可以用于生成报告、创建电子书、制作手册或者为网站提供PDF下载功能。由于其易于集成和使用,很多开发者都会选择"Pisa"来处理项目中的PDF生成任务。 当我们讨论"Pisa"时,...

    Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法

    本文将详细介绍如何解决Django生成PDF时中文出现乱码的问题,以及整个流程的实现步骤。 首先,我们需要安装必要的库。Django本身并不直接支持PDF生成,但我们可以借助第三方库如`xhtml2pdf`来实现。使用pip安装这两...

    Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题

    在Django框架中生成PDF文档并将其显示在网页上,同时解决中文乱码问题,是一项常见的需求。本文将详细介绍如何实现这一功能,并提供一个实际的示例项目供参考。 首先,确保安装了必要的依赖库。Django是Python的Web...

    纳什均衡matlab代码-Personal_coding_projects:Personal_coding_projects

    纳什均衡matlab代码欢迎使用哈维尔的编程产品组合 ...PDF处理管道。 MATLAB编程简介(带有Python补充): 编码入门练习: OLS系数估计。 随机过程示例。 简单的2x2 Nash平衡。 简单的Solow模型。 供需含税。

Global site tag (gtag.js) - Google Analytics