2017-04-10 1 views
0

Ich habe etwas Forschung, aber konnte nicht herausfinden.Reportlab: Barcode nicht auf der Oberseite der PDF-Datei gezeichnet

Ich habe unter Code, der Barcode in eine PDF-Datei schreibt. Ich habe versucht, die Breite und Höhe in diesem Teil des Codes zu ändern, aber es ändert sich nur am Ende der PDF-Datei. Wie schreibe ich den Barcode am Anfang der PDF-Datei?

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

Voll Code:

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

Antwort

1

Vom ReportLab User Guide sehen wir, dass die Argumente drawOn die x- und y-Koordinaten der Leinwand, wo Sie das Objekt zeichnen möchten. Zusätzlich wird in Kapitel 2.1 heißt es:

Die Leinwand als ein weißes Blatt Papier gedacht mit Punkten auf dem Blatt sollte cartesianischen identifiziert mit (X, Y) Koordinaten, die durch Standard haben die (0, 0) Ursprungspunkt in der unteren linken Ecke der Seite .

Also, wenn Sie versuchen, Ihren Barcode zu zeichnen bei 0.5*Inch, 0.5*Inch, versucht ReportLab das Objekt einer halben Zoll vom Boden zu ziehen und einen halben Zoll von der linken Seite. Wenn Sie den Barcode oben zeichnen möchten, müssen Sie einen Y-Wert angeben, der die Höhe der Seite und die Höhe des Balkens berücksichtigt. Dieser Code funktionierte für mich:

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) 
Verwandte Themen