当前位置: 首页 > 工具软件 > xhtml2pdf > 使用案例 >

xhtml2pdf如何支持中文

蓬宾白
2023-12-01

         这段时间在做一个图片PDF的项目, 需要把网页转换成PDF, 找到了python的xhtml2pdf这个库, 个方面都满意,只是对中文的支持不好, html上的中文转换成PDF后都成了乱码, 貌似中文网站都没有找到合适的解决办法, 只能求助于万能的google, 果然不负我望, 废话不多说, 上代码:


django代码

class GeneratePdf(View):
    def get(self, request, *args, **kwargs):
        # Prepare context
        data = {'today': datetime.date.today()}
        template = get_template('pdf.html')
        html = template.render(Context(data))

        io = StringIO.StringIO()
        pisa.CreatePDF(html, dest=io, link_callback=link_callback)

        io.seek(0)
        pdf = io.read()
        io.close()            # Don't forget to close the file handle
        return HttpResponse(pdf, content_type='application/pdf')


django template代码

 {% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>猫</title>
    <link href="{% static "css/pdf.css" %}" rel="stylesheet">
</head>
<style>
    @font-face {
        font-family: STSong;
        src: url('{% static 'fonts/STSong.TTF' %}');
    }

    h3 {
        font-family: STSong;
    }

    .image .image-text {
        float: left;
        width: 50%;
        margin: 30px;
    }

    .imageFrame{
        margin: 20px;
    }
</style>

<body>
    <h3>日期: {{ today }}</h3>
    <hr/>
    <div class="imageContent" >
        <div style="float: left; width: 100%; text-align: center">
            <img src="{% static "img/cat_3.jpg" %}" width="300" height="200">
            <img src="{% static "img/cat.jpg" %}" width="300" height="200">
        </div>
        <div style="float: left; width: 100%; text-align: center">
            <img src="{% static "img/cat.jpg" %}" width="300" height="200">
            <img src="{% static "img/cat_3.jpg" %}" width="300" height="200">
        </div>
        <div style="float: left; width: 100%; text-align: center">
            <img src="{% static "img/cat_3.jpg" %}" width="300" height="200">
            <img src="{% static "img/cat.jpg" %}" width="300" height="200">
        </div>
    </div>
</body>
</html>

其实很简单, 下个支持中文的字体文件, 比如这里的STSong.ttf, 按模板中标注的地方写就可以了

 @font-face {
        font-family: STSong;
        src: url('{% static 'fonts/STSong.TTF' %}');
    }

    h3 {
        font-family: STSong;
    }

补充一下:

这段样式代码放到单独的css文件中好像不好使, 直接嵌在模板文件中就可以, 这个一直忙没时间去研究, 后面有时间看看

 类似资料: