社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
一、安装包:
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
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!