页面大小问题 使用 reportlab 创建条形码的 PDF [英] Page size issue PDF creation of barcodes using reportlab

查看:158
本文介绍了页面大小问题 使用 reportlab 创建条形码的 PDF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,我今天创建了一个脚本,该脚本使用 item# 或任何数字来生成条形码.现在我想在 4 列中打印 60 个相同的条形码,这将使其成为 (15 X 4) 的矩阵,仅使其易于理解.现在我使用自定义大小的页面(900 * 850)成功实现了它,并安装在由 reportlab code128 生成的 15 行和 4 列条形码中.

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. 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.

代码如下:

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()

此脚本生成的文件

问题是现在我只能使用美国 Letter 尺寸而不能使用其他自定义尺寸.我尝试了一些变体,但没有一个奏效.

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.

尝试:

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.

推荐答案

你的代码需要大量改进

  1. 使用字母大小from reportlab.lib.pagesizes import letter
  2. 按照文档中的指定设置您的边距和其他变量:

  1. Use the letter size 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

  • 计算生成的codebar的总大小

  • 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
    

  • 传递给函数 Code128 的宽度值是代码条中单个条的宽度,而不是整个代码条的宽度,您应该将此值保持在 1.1 以下

  • 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

    bar_height   = bars_height - font_size
    bar_width    = 1
    

  • 这样你的循环会更好:

  • 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)
    

  • 这是最终的脚本:

  • 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()
    

  • 这篇关于页面大小问题 使用 reportlab 创建条形码的 PDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆