报告实验室:条形码未绘制在PDF文件的顶部



我做了一些研究,但无法弄清楚。

我有以下代码,可以在PDF文件上写入条形码。我尝试改变这部分代码的宽度和高度,但它仅在 pdf 文件的底部发生变化。如何使条形码写在 PDF 文件的开头?

drawon_width = 0.1*inch
drawon_height = 0.1*inch
barcode.drawOn(c, drawon_width, drawon_height)

完整代码:

import os
import sys
from reportlab.graphics.barcode import code128
from reportlab.graphics.shapes import Drawing
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import mm, inch
from reportlab.pdfgen import canvas
from reportlab.graphics import renderPDF
"""
barcode style is code128
"""
class BarCodeGeneration():
    path = os.path.dirname(os.path.abspath(__file__))
    files_path = os.path.join(path, 'barcode_files_generated')
    def generate_codes(self, code_list):
        absolute_file_path = BarCodeGeneration.files_path + 'Ahjfg7887kk'
        c = canvas.Canvas("test.pdf")
        for i in range(1):
            barcode = code128.Code128("Ahjfg7887kk", barHeight=1.2*inch,barWidth = 1.6)
            #import pdb; pdb.set_trace()
            c.setPageSize((200*mm,80*mm))
            drawon_width = 0.1*inch
            drawon_height = 0.1*inch
            import pdb; pdb.set_trace()
            barcode.drawOn(c, drawon_width, drawon_height, 0.1)
            textobject = c.beginText()
            textobject.setTextOrigin(inch, 2.5*inch)
            lines = ["Hi", "Hello"]
            for line in lines:
                textobject.textLine(line)
            c.drawText(textobject)
            c.showPage()
        c.save()
obj1 = BarCodeGeneration()
obj1.generate_codes([('Ahjfg7887kk', 3)])

从ReportLab用户指南中,我们看到参数drawOn是要在其中绘制对象的画布的x和y坐标。此外,在第2.1章中,它指出:

画布应被视为一张带有点的白纸 在使用笛卡尔 (X,Y( 坐标标识的工作表上,该坐标由 默认在 (0,0( 的左下角具有 (0,0( 原点 页。

因此,当您尝试在0.5*Inch, 0.5*Inch处绘制条形码时,ReportLab 会尝试从底部绘制对象半英寸,从左侧绘制对象半英寸。如果要在顶部绘制条形码,则需要指定一个 y 值,该值考虑了页面的高度和条形图的高度。这段代码对我有用:

bar_height = 1.2*inch
bar_width = 1.6
barcode = code128.Code128("Ahjfg7887kk",
                          barHeight=bar_height, barWidth=bar_width)
page_width = 200*mm
page_height = 80*mm
c.setPageSize((page_width, page_height))
drawon_x = 0.1*inch
drawon_y = page_height - 0.1*inch - bar_height
barcode.drawOn(c, drawon_x, drawon_y, 0.1)

相关内容

  • 没有找到相关文章

最新更新