Я могу поделиться тем, как я это сделал, но моя реализация - нарисовать его прямо на холсте, а затем добавить его в сноску на шаблоне документа. Ваш метод состоит в том, чтобы создать png и затем добавить его (я делаю аналогичную вещь с графическим объектом, но затем я использую pdfrw, который является хорошим дополнением, я немного боролся с доступом на запись к папкам, когда я начинал). Посмотрите, сработает ли вам ниже.
from reportlab.lib.units import mm, cm
from reportlab.lib.pagesizes import A4
from reportlab.graphics.barcode import qr, code128
from reportlab.graphics.shapes import Drawing
from reportlab.platypus import Table, TableStyle
from reportlab.platypus import SimpleDocTemplate
from reportlab.lib import colors
def func(canvas, doc):
canvas.saveState()
# draw a QR code
receipt = str(f'hello')
qr_code = qr.QrCodeWidget(f'{receipt}')
bounds = qr_code.getBounds()
width = bounds[2] - bounds[0]
height = bounds[3] - bounds[1]
d = Drawing(60, 60, transform=[60. / width, 0, 0, 60. / height, 0, 0])
d.add(qr_code)
d.drawOn(canvas, 1.77 * cm, 259.55 * mm)
#Draw Bar code
canvas.setFillColor(colors.black)
barcode = code128.Code128(receipt, barWidth=0.17 * mm, barHeight=5 * mm, ratio=2.75, humanReadable=1)
barcode.drawOn(canvas, 5.95 * cm, 259.55 * mm)
canvas.restoreState()
return func
#
def create_pdf():
story = []
data = [['Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6'],
['0.2', '-0.1', '0', '0', '-0.5', '0.6']]
colwidths = (50)
rowheights = (10)
t = Table(data, colwidths, rowheights)
GRID_STYLE = TableStyle(
[('FONTSIZE', (0, 0), (-1, -1), 5),
('GRID', (0, 0), (-1, -1), 0.5, colors.black),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('LEFTPADDING', (0, 0), (-1, -1), 0),
('RIGHTPADDING', (0, 0), (-1, -1), 0),
('TOPPADDING', (0, 0), (-1, -1), 0),
('BOTTOMPADDING', (0, 0), (-1, -1), 0),
('FONTNAME', (0, 0), (-1, -1), 'Helvetica'),
('SIZE', (0, 0), (-1, -1), 7),
('LEADING', (0, 0), (-1, -1), 8.2),
]
)
t.setStyle(GRID_STYLE)
story.append(t)
doc = SimpleDocTemplate('mydoc.pdf', pagesize=A4, topMargin=50)
doc.build(story, onFirstPage=func)
# ----------------------------------------------------------------------
if __name__ == "__main__":
create_pdf() # Printing the pdf