我做了一些研究,但无法弄清楚。
我在下面的代码中将条形码写在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)])
答案 0 :(得分:1)
从ReportLab User Guide,我们看到参数drawOn
是要绘制对象的画布的x和y坐标。此外,在第2.1章中指出:
画布应该被认为是一张带有点的白纸 在使用笛卡尔坐标(X,Y)坐标识别的工作表上 默认情况下,(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)