2017-04-10 2 views
0

J'ai fait quelques recherches, mais je n'ai pas pu comprendre.Reportlab: code à barres non dessiné sur le haut du fichier PDF

J'ai ci-dessous le code qui écrit le code à barres sur un fichier PDF. J'ai essayé de faire varier la largeur et la hauteur de cette partie du code, mais cela ne change qu'en bas du fichier pdf. comment puis-je faire le code à barres écrire au début du fichier PDF?

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

code complet:

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

Répondre

1

De l'ReportLab User Guide, nous voyons que les arguments drawOn sont les coordonnées x et y de la toile où vous voulez dessiner l'objet. De plus, au chapitre 2.1, il déclare:

La toile doit être considérée comme une feuille de papier blanc avec des points sur la feuille identifiée à l'aide cartésien (X, Y) qui, par par défaut ont la (0, 0) point d'origine dans le coin inférieur gauche de la page .

Ainsi, lorsque vous essayez d'attirer votre code à barres à 0.5*Inch, 0.5*Inch, ReportLab tente de dessiner l'objet d'un demi-pouce du fond et un demi-pouce de la gauche. Si vous souhaitez dessiner le code à barres en haut, vous devez spécifier une valeur y qui prend en compte la hauteur de la page et la hauteur de la barre. Ce code a fonctionné pour moi:

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)