2017-06-23 30 views
-1

今日、バーコードを生成するためにその目的のためにアイテム#または任意の番号をとるスクリプトを作成しました。今では、4つの列に60の同じバーコードを印刷したいと思っていました。これは、(15 X 4)のマトリックスになって理解しやすくなりました。今私は正常にカスタムサイズのページ(900 * 850)でそれを達成し、レポート行code128によって生成された15行と4列のバーコードに当てはまりました。ページサイズの問題reportlabを使用したバーコードのPDF作成

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

問題は、今私が唯一のUSレターサイズとなし、他のカスタムサイズを使用するように制限していますということです。ここで

コードがあります。私はバリエーションはほとんど試していませんが、どれもうまくいきませ

試みます。

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

hereはそれが収まる必要があります必要な形式では、助けるために持っていいだろう。

答えて

1

あなたのコードでは、改善の多くを必要と

  1. 文書に指定されているあなたのマージンや他の変数を設定レターサイズにfrom reportlab.lib.pagesizes import letter
  2. を使用します。

    margin_x  = 7.526 
    margin_y  = 13.876 
    padding_x  = 7.526 
    font_size  = 15 
    width, height = letter 
    
  3. 合計サイズを計算します生成されたコードバーの

    bars_width = (float(width-margin_x*2)-3*padding_x)/4 
    bars_height = float(height-margin_y*2)/15 
    
  4. 機能Code128のに渡された幅の値がcodebar全体ではなくcodebar内の1つのバーの幅であり、あなたがこの方法良いだろう1.1

    bar_height = bars_height - font_size 
    bar_width = 1 
    
  5. あなたのループの下に、この値を維持する必要があります:

    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. これが最終的なスクリプトです:

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

コードは完璧ですが、codeName = "NOT_C17"の場合のみです。私はいくつかの人に疲れてしまい、結果がすべて乱れてしまったので、ブロックの所与のサイズに合うようにバーコードを制限するために何をすべきか教えてください。 「NOT_C17」または「HDW_32-0.125」で試してください。この最後の1つは、私がそれを試したときにかなり混乱しています。ありがとう – R0SENAM

+0

私はそれを行うコードを編集しました – SEDaradji

関連する問題