简体   繁体   English

页面大小问题使用reportlab创建PDF条码

[英]Page size issue PDF creation of barcodes using reportlab

Okay i created a script today that takes an item# or any number for that purpose to generate a barcode. 好的,我今天创建了一个脚本,该脚本为此目的使用一个项目号或任何数字来生成条形码。 Now i wanted to print 60 same barcodes in 4 columns, that would make it a matrix of (15 X 4) only making it easy to understand. 现在,我想在4列中打印60个相同的条形码,这将使其成为(15 X 4)的矩阵,仅使其易于理解。 Now i successfully achieved it with a custom sized page (900*850) and fitted in 15 rows and 4 columns of barcodes generated by reportlab code128. 现在,我通过自定义大小的页面(900 * 850)成功实现了该功能,并安装了reportlab code128生成的15行4列条形码。

Here is the code: 这是代码:

from reportlab.graphics.barcode import code128
from reportlab.lib.units import mm
from reportlab.pdfgen import canvas

#----------------------------------------------------------------------#
def createBarCodes():
    codeName = "NOT_C17"

    c = canvas.Canvas(codeName+".pdf")
    c.setPageSize((900, 850))

    barcode_value = codeName
    barcode128 = code128.Code128(
                            barcode_value,
                            barHeight=20,
                            barWidth=1.05,
                            fontSize=15,
                            humanReadable = True
                        )

    x = 15 * mm
    for i in range(4):
        y = 275 * mm
        i=0
        while i < 15:
            barcode128.drawOn(c, x, y)
            y = y - 18 * mm
            i+=1
        x=x+(70*mm)
    c.save()

if __name__ == "__main__":
    createBarCodes()

A file generated by this script 该脚本生成的文件

The issue is that now I am restricted to using only US Letter size and no other custom size. 问题是,现在我只能使用美国字母大小,而不能使用其他自定义大小。 I tried few variations but none worked. 我尝试了几种变体,但没有奏效。

Tries: 尝试:

from reportlab.lib.pagesizes import letter
c = canvas.Canvas(codeName+".pdf", pagesize=letter)

barcode_value = codeName
barcode128 = code128.Code128(
                          barcode_value,
                          barHeight=16.7564*mm,
                          barWidth=44.45*mm,
                          fontSize=15,
                          humanReadable = True
                     )

x = 7.526 * mm
for i in range(4):
    y = 265.524 * mm
    i=0
    while i < 15:
        barcode128.drawOn(c, x, y)
        y = y - 18 * mm
        i+=1
        break
    x=x+(70*mm)
    break
c.save()

and here is the required format that it must fit in. Would be nice to have to help. 是它必须适合的必需格式。很高兴能提供帮助。

You code requires a lot of improvement 您的代码需要大量改进

  1. Use the letter size from reportlab.lib.pagesizes import letter 使用from reportlab.lib.pagesizes import letter的字母大小
  2. Set your margins and other variables as specified in the document : 设置文档中指定的边距和其他变量:

     margin_x = 7.526 margin_y = 13.876 padding_x = 7.526 font_size = 15 width, height = letter 
  3. Calculate the total size of the generated codebar 计算生成的代码栏的总大小

     bars_width = (float(width-margin_x*2)-3*padding_x)/4 bars_height = float(height-margin_y*2)/15 
  4. The width value passed to the function Code128 is the width of a single bar within the codebar and not the whole codebar, you should keep this value below 1.1 传递给函数Code128的宽度值是代码条中单个条的宽度,而不是整个代码条中的宽度,您应将此值保持在1.1以下

     bar_height = bars_height - font_size bar_width = 1 
  5. your loops would be better this way : 这样您的循环会更好:

     for i in range(0,4): for j in range(0,15): x = margin_x + i * (bars_width+padding_x) y = margin_y + j * bars_height barcode128.drawOn(c, x , y) 
  6. this is the final script : 这是最终的脚本:

     from reportlab.graphics.barcode import code128 from reportlab.lib.units import mm from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter #----------------------------------------------------------------------# def createBarCodes(): codeName = "NOT_C17" c = canvas.Canvas(codeName+".pdf",pagesize=letter) margin_x = 7.526 margin_y = 13.876 padding_x = 7.526 font_size = 15 width, height = letter extra_padding = 20 bars_width = (float(width-margin_x*2)-3*padding_x)/4 bars_height = float(height-margin_y*2)/15 bar_height = bars_height - font_size #For alphanumeric values, the total number of bars is calculated as: #total = (11*string_length+35) bar_width = (bars_width-extra_padding)/(len(codeName)*11+35) barcode_value = codeName barcode128 = code128.Code128( barcode_value, barHeight=bar_height, barWidth=bar_width, humanReadable = True ) for i in range(0,4): for j in range(0,15): x = margin_x + i * (bars_width+padding_x) y = margin_y + j * bars_height barcode128.drawOn(c, x , y) c.save() if __name__ == "__main__": createBarCodes() 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM