我的django应用程序正在使用多帧reportlab pdf报告,我想添加一些条形码/二维码。
我遇到的问题是我添加到布局中的每个对象都必须是Flowable。 所以问题是将PlotArea(QrCodeWidget的母类)转换为Flowable。
如果我们在这里得到答案,如果我们将QrCodeWidget添加为
,我们可以获得错误消息AttributeError: QrCodeWidget instance has no attribute 'getKeepWithNext'
答案 0 :(得分:5)
好吧,我制作了自己的Flowable,它比我教的简单。
使用此API在canva上进行操作非常简单。
from reportlab.platypus import Flowable
from reportlab.graphics.barcode import qr
from reportlab.graphics import renderPDF
from reportlab.graphics.shapes import Drawing
class QRFlowable(Flowable):
# usage :
# story.append(QRFlowable("http://google.fr"))
def __init__(self, qr_value):
# init and store rendering value
Flowable.__init__(self)
self.qr_value = qr_value
def wrap(self, availWidth, availHeight):
# optionnal, here I ask for the biggest square available
self.width = self.height = min(availWidth, availHeight)
return self.width, self.height
def draw(self):
# here standard and documented QrCodeWidget usage on
# Flowable canva
qr_code = qr.QrCodeWidget(self.qr_value)
bounds = qr_code.getBounds()
qr_width = bounds[2] - bounds[0]
qr_height = bounds[3] - bounds[1]
w = float(self.width)
d = Drawing(w, w, transform=[w/qr_width, 0, 0, w/qr_height, 0, 0])
d.add(qr_code)
renderPDF.draw(d, self.canv, 0, 0)
答案 1 :(得分:0)
您应该从QrCodeWidget
生成图片,并将其包含在Image
可流动的图片中。