Python生成Pdf文件 - Go语言中文社区

Python生成Pdf文件


一、安装包:

pip  install pdfmetrics canvas  code128 reportlab

二、字体文件放到reportlabx安装包下面(不支持中文):

三、编辑视图:

from django.http import HttpResponse
from reportlab.graphics.barcode import code128
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from api import models
from api.utils.sers import getUserListSerializer
from rest_framework.throttling import UserRateThrottle
from reportlab.lib.units import mm

class TestViewSetAction(ModelViewSet):
    queryset = []

    def list(self, request, *args, **kwargs):
        pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf'))  # 注册字体
        response = HttpResponse(content_type='application/pdf')
        response['Content-Disposition'] = 'filename="info_label.pdf"'
        date_info_str='888666'
        p = canvas.Canvas(response, pagesize=(65 * mm, 25 * mm))
        data_info=[
            {'SKU':'123456','name':'落霞与孤鹜齐飞'},
            {'SKU':'456789','name':'秋水共长天一色'},
        ]

        for info in data_info:
            p.setFont("Helvetica-Bold", 12)
            p.drawCentredString(32.5 * mm, 20 * mm, info['SKU'])

            p.setFont("Helvetica-Bold", 8)
            p.drawCentredString(60 * mm, 21 * mm, date_info_str)

            barcode = code128.Code128(info['SKU'], barHeight=12 * mm, barWidth=(3.7 / len(info['SKU'])) * mm)
            barcode.drawOn(p, x=0 * mm, y=7 * mm, _sW=0)

            if len(info['name']) <= 40:
                p.setFont("SimSun", 6)
                p.drawCentredString(32.5 * mm, 2.5 * mm, info['name'])
            if 40 < len(info['name']) <= 80:
                p.setFont("SimSun", 6)
                p.drawCentredString(32.5 * mm, 3.5 * mm, info['name'][0:40])
                p.drawCentredString(32.5 * mm, 1 * mm, info['name'][40:])
            if 80 < len(info['name']) <= 120:
                p.drawCentredString(32.5 * mm, 4.5 * mm, info['name'][0:40])
                p.drawCentredString(32.5 * mm, 2.5 * mm, info['name'][40:80])
                p.drawCentredString(32.5 * mm, 0.5 * mm, info['name'][80:])
            if 120 < len(info['name']):
                p.drawCentredString(32.5 * mm, 4.98 * mm, info['name'][0:40])
                p.drawCentredString(32.5 * mm, 3.32 * mm, info['name'][40:80])
                p.drawCentredString(32.5 * mm, 1.66 * mm, info['name'][80:120])
                p.drawCentredString(32.5 * mm, 0 * mm, info['name'][120:])

            p.showPage()

        p.save()

        return response

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43692357/article/details/100186126
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-08 07:27:33
  • 阅读 ( 766 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢