コード例 #1
0
    def get_pdf(self, spec, objects, print_options=False):
        """Return PDF data for labels of objects.

        spec: A labels.Specification object describing the sheets
        objects: A recordset of objects to report on
        border: Whether to print borders on the sheets
        print_options: Dictionary containing key number_of_copies
        """
        self.ensure_one()
        print_options = print_options or {}

        renderer = self.get_renderer_plugin()

        config = renderer.get_template_config(self)

        def renderer_closure(label, width, height, obj):
            return renderer.render_label(label, width, height, obj, config)

        sheet = labels.Sheet(spec,
                             renderer_closure,
                             border=print_options.get('border', False))
        renderer.populate_sheet(sheet,
                                objects,
                                config,
                                print_options=print_options)
        pdfbuf = StringIO()
        sheet.save(pdfbuf)
        pdf = pdfbuf.getvalue()
        return pdf
コード例 #2
0
ファイル: views.py プロジェクト: spoldman/eldar
def verdmidar(vorur):
    """ Býr til PDF skjal af verðmiðum úr lista af Vörum.
	"""
    import labels
    from reportlab.graphics import shapes
    from reportlab.pdfbase.pdfmetrics import stringWidth

    # Create an A4 portrait (210mm x 297mm) sheets with 2 columns and 8 rows of
    # labels. Each label is 90mm x 25mm with a 2mm rounded corner. The margins are
    # automatically calculated.
    specs = labels.Specification(210, 297, 2, 8, 90, 25, corner_radius=2)

    # Create a function to draw each label. This will be given the ReportLab drawing
    # object to draw on, the dimensions (NB. these will be in points, the unit
    # ReportLab uses) of the label, and the object to render.
    def draw_label(label, width, height, vara):

        textastaerd = 32
        nafnbreidd = stringWidth(vara.fulltnafn, "Helvetica", textastaerd)
        while nafnbreidd > width - 4:
            textastaerd *= 0.95
            nafnbreidd = stringWidth(vara.fulltnafn, "Helvetica", textastaerd)

        nafnbreidd = stringWidth(vara.fulltnafn, "Helvetica", textastaerd)
        label.add(
            shapes.String((width - nafnbreidd) / 2,
                          height - 32 - 16,
                          str(vara.fulltnafn),
                          fontName="Helvetica",
                          fontSize=textastaerd))

        label.add(
            shapes.String(2,
                          2,
                          str(vara.verd().smasoluverd) + ' kr.',
                          fontName="Helvetica",
                          fontSize=16))
        label.add(
            shapes.String(width - 2,
                          2,
                          str(vara.vorunumer()),
                          fontName="Helvetica",
                          fontSize=16,
                          textAnchor="end"))

    # Create the sheet.
    #sheet = labels.Sheet(specs, draw_label, border=False)
    sheet = labels.Sheet(specs, draw_label)

    # Add a couple of labels.
    for vara in vorur:
        sheet.add_label(vara)
        print(vara.verd())
        #print(vara.verd)

    # Save the file and we are done.
    sheet.save('basic.pdf')
    print("{0:d} label(s) output on {1:d} page(s).".format(
        sheet.label_count, sheet.page_count))
コード例 #3
0
ファイル: inventory_labels.py プロジェクト: SmithChart/s0inv
def create_pdf(db, ids):
    specs = labels.Specification(57, 32, 1, 2, 57, 16)
    sheet = labels.Sheet(specs, _draw_label, border=True)
    for i in ids:
        item = _query_by(db, Item, 'id', i)
        project = _query_by(db, Project, 'name', item.project_name)
        sheet.add_label((item, project))
    sheet.save('tmp/label.pdf')
    return 'label.pdf'
コード例 #4
0
def download_medal_labels(request):
    specs = labels.Specification(215.9,
                                 279.4,
                                 4,
                                 5,
                                 38.1,
                                 38.1,
                                 corner_radius=19.0,
                                 top_margin=20,
                                 bottom_margin=20)
    sheet = labels.Sheet(specs, draw_medal_label, border=False)

    medal_labels = []
    for division in models.Division.objects.all():
        # Event Awards
        for event in models.Event.objects.all():
            for place in range(division.event_award_count):
                medal_labels.append({
                    'meet':
                    division.meet.short_name,
                    'session':
                    division.session.first().name,
                    'level':
                    'Level: {}'.format(division.level.name.upper()),
                    'age_div':
                    'Div: {}'.format(division.short_name),
                    'place':
                    '{} Place'.format(ordinal(place + 1)),
                    'event':
                    event.name,
                })
        # All Around Awards, skipping 1st-3rd place
        if division.all_around_award_count > 3:
            for place in range(4, division.all_around_award_count + 1):
                medal_labels.append({
                    'meet':
                    division.meet.short_name,
                    'session':
                    division.session.first().name,
                    'level':
                    'Level: {}'.format(division.level.name.upper()),
                    'age_div':
                    'Div: {}'.format(division.short_name),
                    'place':
                    '{} Place'.format(ordinal(place)),
                    'event':
                    'All Around',
                })

    sheet.add_labels(medal_labels)

    timestamp = datetime.now().strftime('%Y-%m-%d-%H-%M')
    response = HttpResponse(content_type='applicaiton/pdf')
    response[
        'content-Disposition'] = 'attachment;filename=medal_labels_' + timestamp + '.pdf'
    sheet.save(response)
    return response
コード例 #5
0
ファイル: old_PDF_printer.py プロジェクト: matt-dale/designdb
    def saveAuxLabelSheet(self, auxLabels):
        """
        create the aux labels and return a consolidated sheet
        """
        SmallSheet = labelPrinter.Sheet(self.smallSpecs,
                                        self.draw_aux_label,
                                        border=self.drawBorder)
        LargeSheet = labelPrinter.Sheet(self.largeSpecs,
                                        self.draw_aux_label,
                                        border=self.drawBorder)

        largeLabel = Label.objects.get(description__icontains='5160')
        smallLabel = Label.objects.get(description__icontains='5167')

        # make the subdirectory for aux labels
        auxDir = self.printdirectory + 'auxLabels/'
        if os.path.isdir(auxDir) == False:
            os.mkdir(auxDir)

        for auxLabel in auxLabels:
            if auxLabel.label == smallLabel:
                for x in range(auxLabel.quantityToPrint):
                    SmallSheet.add_label(auxLabel.labelText)
            elif auxLabel.label == largeLabel:
                for x in range(auxLabel.quantityToPrint):
                    LargeSheet.add_label(auxLabel.labelText)

        if SmallSheet.page_count > 0:
            theSheet = auxDir + '100AuxLabelsSmall.pdf'
            SmallSheet.save(theSheet)
        if LargeSheet.page_count > 0:
            theSheet = auxDir + '100AuxLabelsLarge.pdf'
            LargeSheet.save(theSheet)

        self.consolidateAllSheets(subDir='auxLabels/')
        return auxDir
コード例 #6
0
def codes2pdf(codes, batch_id):
    specs = labels.Specification(210,
                                 297,
                                 3,
                                 10,
                                 65,
                                 25,
                                 corner_radius=2,
                                 bottom_padding=5)
    sheet = labels.Sheet(specs, draw_label, border=True)
    for code in codes:
        sheet.add_label(code)
    filename = str(batch_id) + '.pdf'
    sheet.save(filename)
    print("{0:d} label(s) output on {1:d} page(s).".format(
        sheet.label_count, sheet.page_count))
コード例 #7
0
def generate_labels():
    mailingInfo = run_scraper()

    specs = labels.Specification(215.9,
                                 279.4,
                                 3,
                                 10,
                                 66.7,
                                 25.4,
                                 corner_radius=2)

    sheet = labels.Sheet(specs, drawLabel, border=True)

    sheet.add_labels(mailingInfo)

    sheet.save('mailing_labels.pdf')
    print('done!')
コード例 #8
0
def get_sheet():
    # Avery 5963 Labels
    # http://www.avery.com/avery/en_us/Products/Labels/Shipping-Labels/White-Shipping--Labels_05963.htm
    # http://www.worldlabel.com/Pages/wl-ol125.htm
    specs = labels.Specification(216, 279, 2, 5, 102, 51,
                                 corner_radius=2,
                                 left_padding=3,
                                 bottom_padding=2,
                                 row_gap=0)

    # Add some fonts.
    registerFont(TTFont('Judson Bold',
                        os.path.join(base_path, 'Judson-Bold.ttf')))
    registerFont(TTFont('KatamotzIkasi',
                        os.path.join(base_path, 'KatamotzIkasi.ttf')))

    # Create the sheet.
    return labels.Sheet(specs, write_name, border=False)
コード例 #9
0
ファイル: page_background.py プロジェクト: svvitale/pylabels
def process_sheet(specs, filename):
    # Create the sheet.
    sheet = labels.Sheet(specs, draw_label, border=True)

    # Add a couple of labels.
    sheet.add_label("Hello")
    sheet.add_label("World")

    # We can also add each item from an iterable.
    sheet.add_labels(range(3, 22))

    # Note that any oversize label is automatically trimmed to prevent it messing up
    # other labels.
    sheet.add_label("Oversized label here")

    # Save the file and we are done.
    sheet.save(filename)
    print("{0:s}: {1:d} label(s) output on {2:d} page(s).".format(
        filename, sheet.label_count, sheet.page_count))
コード例 #10
0
def download_athlete_labels(request):
    gymnasts = models.Gymnast.objects.all().\
        exclude(is_scratched=True, athlete_id=None).\
        order_by('division__session', 'team', 'division', 'last_name', 'first_name').\
        select_related()

    specs = labels.Specification(215.9,
                                 279.4,
                                 3,
                                 10,
                                 66.675,
                                 25.4,
                                 row_gap=0,
                                 corner_radius=2,
                                 left_margin=5,
                                 right_margin=5)
    sheet = labels.Sheet(specs, draw_athlete_label, border=False)

    athlete_labels = []
    for gymnast in gymnasts:
        session = 'None'
        if gymnast.division and gymnast.division.session.first():
            session = gymnast.division.session.first().name

        label = {}
        label['id'] = str(gymnast.athlete_id)
        label['name'] = '{} {}'.format(gymnast.first_name, gymnast.last_name)
        label['team'] = gymnast.team.team
        label['info'] = '{2} Level: {0} Div: {1}'.format(
            gymnast.level.name.upper(),
            gymnast.division.short_name if gymnast.division else '', session)
        athlete_labels.append(label)

    sheet.add_labels(athlete_labels)

    timestamp = datetime.now().strftime('%Y-%m-%d-%H-%M')
    response = HttpResponse(content_type='application/pdf')
    response[
        'Content-Disposition'] = 'attachment;filename=athlete_labels_' + timestamp + '.pdf'
    sheet.save(response)

    return response
コード例 #11
0
def create_labels(folder='invitations/scripts/labels/'):
    def draw_label(label, width, height, obj):
        label.add(
            shapes.String(2, 2, str(obj), fontName='Helvetica', fontSize=10))

    specs = labels.Specification(215.9,
                                 279.4,
                                 2,
                                 5,
                                 101.6,
                                 50.8,
                                 corner_radius=2)
    guests = Guest.objects.invited().filter(country='US')
    for page_num, page in enumerate(chunks(guests, size=10)):
        sheet = labels.Sheet(specs, draw_label, border=True)
        for guest in page:
            text = f'{guest.party_line()}\n'
            text += '\r'.join(guest.address())
        sheet.add_label(text)
        sheet.save(os.path.join(folder, f'label_sheet_{page_num:02}.pdf'))
コード例 #12
0
def create_labels(s):
    """Create mailing labels (PDF) for each head of house + spouse (if any)."""
    assert s.logged_in, 'Expected logged in session.'

    # To debug label placement, setting border=True might help.
    sheet = labels.Sheet(create_label_spec(), draw_label, border=False)

    directory = s.get_unit_data()['households']
    for record in directory:
        create_label(sheet, record)

    file = OUTPUT_DIR / 'mailing_labels.pdf'
    sheet.save(str(file))
    print(
        f'{sheet.label_count} label(s) ' 
        f'on {sheet.page_count} sheet(s) ' 
        'saved to', file
    )
    print()
    print('TIP: Try printing a single page to test proper alignment.')
コード例 #13
0
def download_team_labels(request):
    sessions = models.Session.objects.all()

    specs = labels.Specification(215.9,
                                 279.4,
                                 3,
                                 10,
                                 66.675,
                                 25.4,
                                 row_gap=0,
                                 corner_radius=2,
                                 left_margin=5,
                                 right_margin=5)
    sheet = labels.Sheet(specs, draw_team_label, border=False)

    team_labels = []
    for session in sessions:
        levels = ', '.join(map(str, sorted(session.levels)))

        teams = Team.objects.filter(gymnasts__division__session=session).\
            order_by('gymnasts__division__session', 'team').distinct()

        for team in teams:
            team_labels.append({
                'team': team.team,
                'session': session.name,
                'level': 'Level: {}'.format(levels.upper())
            })

    sheet.add_labels(team_labels)

    timestamp = datetime.now().strftime('%Y-%m-%d-%H-%M')
    response = HttpResponse(content_type='application/pdf')
    response[
        'Content-Disposition'] = 'attachment;filename=team_labels_' + timestamp + '.pdf'
    sheet.save(response)

    return response
コード例 #14
0
    def handle_noargs(self, **options):
        # Get the cages
        prompt = ('Enter a list of cage names, separated by spaces, for'
                  'which you need water restriction labels.\n'
                  'Example: CR22 CR12 CR13\n')
        data = raw_input(prompt)
        water_restriction_cage_name_l = data.split()

        prompt = ('Enter a list of cage names, separated by spaces, for'
                  'which you need cage labels.\n'
                  'Example: CR22 CR12 CR13\n')
        data = raw_input(prompt)
        cage_card_cage_name_l = data.split()

        prompt = ('Enter the row to start printing on. Example: for the '
                  'second from top row, enter 2: ')
        data = raw_input(prompt)
        row_start = int(data)

        specs = labels.Specification(215.9,
                                     279.4,
                                     2,
                                     15,
                                     87.3,
                                     16.9,
                                     corner_radius=2,
                                     row_gap=0,
                                     column_gap=13.3)

        def draw_label(label, width, height, obj):
            print obj
            try:
                fillColor = obj['fillColor']
            except KeyError:
                fillColor = 'black'

            kwargs = {
                'fontName': 'Helvetica',
                'fontSize': 10,
                'textAnchor': 'middle',
                'fillColor': fillColor
            }

            if obj['typ'] == 'water restriction':
                kwargs = {
                    'fontName': 'Helvetica',
                    'fontSize': 10,
                    'textAnchor': 'middle',
                    'fillColor': fillColor
                }

                ## Header
                label.add(
                    shapes.String(
                        width * .5, height - 10,
                        "WATER RESTRICTED -- Cage %s" % obj['cage_name'],
                        **kwargs))

                label.add(
                    shapes.String(width * .5, height - 20,
                                  "BRUNO LAB   AAAY8462   UNI: CCR2137",
                                  **kwargs))

                label.add(
                    shapes.Line(width * .02,
                                height - 22,
                                width * .98,
                                height - 22,
                                strokeColor=fillColor))

                ## Each mouse
                xy_l = [(.2, -32), (.5, -32), (.8, -32), (.2, -42), (.5, -42),
                        (.8, -42)]

                for mouse, headplate, xy in zip(obj['mice'], obj['headplates'],
                                                xy_l):
                    label.add(
                        shapes.String(width * xy[0], height + xy[1],
                                      '%s - %s' % (mouse, headplate),
                                      **kwargs))

            elif obj['typ'] == 'cage':
                kwargs = {
                    'fontName': 'Helvetica',
                    'fontSize': 10,
                    'textAnchor': 'start',
                    'fillColor': fillColor
                }

                ## Header
                label.add(
                    shapes.String(width * .5,
                                  height - 10,
                                  "Cage: %s" % obj['cage_name'],
                                  fontName='Helvetica',
                                  fontSize=10,
                                  fillColor=fillColor,
                                  textAnchor='middle'))

                ## Each mouse
                xy_l = [(.1, -20), (.6, -20), (.1, -30), (.6, -30), (.1, -40)]

                for mouse, full_name, genotype, headplate, xy in zip(
                        obj['mice'], obj['full_names'], obj['genotypes'],
                        obj['headplates'], xy_l):

                    label.add(
                        shapes.String(
                            width * xy[0], height + xy[1],
                            '%s - %s - %s' % (mouse, headplate, full_name),
                            **kwargs))

        # Directly specify the cages we need
        cage_name_l = water_restriction_cage_name_l + cage_card_cage_name_l
        cage_name_l = list(np.unique(cage_name_l))

        # Get the colony specs
        colony_specs = {}
        for cage_name in cage_name_l:
            # Init the specs for this cage
            colony_specs[cage_name] = {}
            colony_specs[cage_name]['mice'] = []
            colony_specs[cage_name]['headplates'] = []
            colony_specs[cage_name]['genotypes'] = []
            colony_specs[cage_name]['full_names'] = []
            colony_specs[cage_name]['cage_name'] = cage_name

            # Find the cage
            cage = runner.models.BehaviorCage.objects.filter(
                name=cage_name).first()

            # Set the color
            colony_specs[cage_name]['fillColor'] = cage.label_color.lower()
            if colony_specs[cage_name]['fillColor'] == 'pink':
                colony_specs[cage_name]['fillColor'] = 'magenta'

            # Iterate over mice
            for mouse in cage.mouse_set.all():
                colony_specs[cage_name]['mice'].append(mouse.name)
                colony_specs[cage_name]['headplates'].append(
                    mouse.headplate_color)
                colony_specs[cage_name]['genotypes'].append(mouse.genotype)
                colony_specs[cage_name]['full_names'].append(
                    mouse.husbandry_name)

        # Make a sheet
        sheet = labels.Sheet(specs, draw_label, border=False)

        # Define the used labels
        used_labels = []
        for row in range(
                1, row_start):  # second number is the 1-based row to start on
            for col in range(1, 3):
                used_labels.append((row, col))
        sheet.partial_page(1, used_labels)

        # Add label for each cage
        for cage_name, cage_specs in colony_specs.items():
            if cage_name in water_restriction_cage_name_l:
                # Copy specs over
                cage_specs2 = cage_specs.copy()
                cage_specs2['typ'] = 'water restriction'

                # Add the label
                sheet.add_label(cage_specs2)

            if cage_name in cage_card_cage_name_l:
                # Copy specs over
                cage_specs2 = cage_specs.copy()
                cage_specs2['typ'] = 'cage'

                # Add the label
                sheet.add_label(cage_specs2)

        sheet.save("auto_created_labels.pdf")
        os.system('xdg-open auto_created_labels.pdf')
コード例 #15
0
def label_maker(acft):
    """ Makes labels for my inventory program"""

    conn = sqlite3.connect('inventory.db')
    cur = conn.cursor()
    # nsn, pn, desc, remarks, location, niin, acft
    db = cur.execute(
        'select desc, pn, location, niin, nsn, acft from benchstock where acft="{}" and label="true"'
        .format(acft)).fetchall()

    font_path = 'fonts'
    big_lablels = (101, 34, 2, 7)
    address_labels = (68.675, 26.4, 3, 10)
    label_width, label_height, columns, rows = address_labels
    specs = labels.Specification(215,
                                 279.4,
                                 columns,
                                 rows,
                                 label_width,
                                 label_height,
                                 row_gap=0,
                                 column_gap=4,
                                 top_padding=1,
                                 bottom_padding=1,
                                 right_padding=1)

    def draw_label_top_bc(label, width, height, obj):
        # Just convert the object to a string and print this at the bottom left of
        # the label.
        label.add(
            shapes.String(2, 2, str(obj[0]), fontName="Helvetica",
                          fontSize=12))
        label.add(
            shapes.String(2,
                          13,
                          str(obj[1]),
                          fontName="Helvetica",
                          fontSize=12))
        label.add(
            shapes.String(2,
                          24,
                          str(obj[2]),
                          fontName="Helvetica",
                          fontSize=12))
        label.add(shapes.Image(2, 46, 180, 40, make_barcode(obj[3])))
        # label.add(shapes.String(38, 30, str(obj[3]), fontName="3of9", fontSize=30))
        label.add(
            shapes.String(2,
                          35,
                          str(obj[4]),
                          fontName="Helvetica",
                          fontSize=12))

    def make_barcode(code):
        leading = '000'
        if acft == 'luh':
            leading = '720'
        elif acft == 'apache':
            leading = '640'
        code = leading + str(code)
        ean = barcode.get('ean13', code, writer=ImageWriter())
        filename = ean.save('barcodes/{}'.format(code))
        return filename

    sheet = labels.Sheet(specs, draw_label_top_bc, border=False)

    s = '1234121231234'
    n = '{}-{}-{}-{}'.format(s[:-9], s[-9:-7], s[-7:-4], s[-4:])
    # sheet.add_label([ 'Nomenclature','Part No.', 'Location', '1234121231234',n, ''])
    for row in db:
        if row[3] != '':
            nsn = '{}-{}-{}-{}'.format(row[4][:-9], row[4][-9:-7],
                                       row[4][-7:-4], row[4][-4:])
            sheet.add_label([row[0], row[1], row[2], row[3], nsn, row[5]])

    sheet.save('basic_new.pdf')
    print("{0:d} label(s) output on {1:d} page(s).".format(
        sheet.label_count, sheet.page_count))
コード例 #16
0
# Create A4 portrait (210mm x 297mm) sheets with labels.
specs = labels.Specification(
    sheet_width=210,  # A4
    sheet_height=297,  # A4
    columns=(config["CONFIG"]["columns"]),
    rows=(config["CONFIG"]["rows"]),
    label_width=(config["CONFIG"]["label_width"]),
    label_height=(config["CONFIG"]["label_height"]),
    corner_radius=2,
)


for countryFile in filesToProcess:
    # Create the sheet with or without border
    sheet = labels.Sheet(specs, writeLabelInfo, border=False)

    # get address data from spreadsheet
    wb = xlrd.open_workbook(pardir + "\\" + countryFile)
    ws = wb.sheet_by_index(0)
    allInfo = []
    rowInfo = []
    for row_idx in range(1, ws.nrows):
        rowInfo.append(ws.cell_value(row_idx, 0))  # name
        rowInfo.append(ws.cell_value(row_idx, 4))  # address
        rowInfo.append(ws.cell_value(row_idx, 5))  # city
        rowInfo.append(ws.cell_value(row_idx, 6))  # state
        rowInfo.append(ws.cell_value(row_idx, 8))  # country
        rowInfo.append(ws.cell_value(row_idx, 7))  # poscode
        rowInfo.append(ws.cell_value(row_idx, 9))  # orders
        allInfo.append(rowInfo[:])
コード例 #17
0
    # Create a human-readable label and position it
    human_readable = os.path.splitext(os.path.split(filepath)[1])[0]
    b = shapes.String(width / 2.0, 15, human_readable, textAnchor="middle")

    # Create a space to write in a donor name
    c = shapes.String(30, (height - 30), "Donor name: ")

    label.add(a)
    label.add(b)
    label.add(c)


# In[9]:

sheet = labels.Sheet(specs, write_content, border=True)

# In[10]:

files = [os.path.join(wd, f) for f in os.listdir(wd)]

# In[11]:

sheet.add_labels(files)

# Save the output to the current directory. To save somewhere else, supply a path.

# In[12]:

sheet.save('labels.pdf')
コード例 #18
0
ファイル: item_labels.py プロジェクト: mstykow/item_labels
# Find top-left corner of data table.
startRow = find_data(itemsSheet)

# Find columns of source fields.
srcFieldsDict = find_columns(srcFieldsList, itemsSheet)

# Map source fields to required fields and write to labelSheet if 'Label' cell is non-empty.
source_to_target(itemsSheet, startRow, maxRow, labelSheet, srcFieldsDict, reqFields)

# Assign certification status based on memo cell.
reqCol1 = reqFields['Memo']
reqCol2 = reqFields['Certification']
cert_status(labelSheet, reqCol1, reqCol2, certStatus)

# Create the sheet.
itemLabels = labels.Sheet(specs, write_name, border=False)
gridTuple = numpair_tuples(topUsed, bottomUsed)
itemLabels.partial_page(1, gridTuple)

# Create PDF labels row by row from labelSheet.
reqCol3 = reqFields['Label']
create_labels(labelSheet, itemLabels, reqCol3)

# Uncomment the following block to save data to Excel file also.
# This may be useful for debugging the above code.

#try:
#    print('Saving Excel data...')
#    itemsWB.save(exportFile)
#    print('EST import data also saved to sheet "EST" of %s.' % (exportFile))
#except:
コード例 #19
0
ファイル: label_maker.py プロジェクト: rhaejr/Inventory
#     # label.add(shapes.String(38, 30, str(obj[3]), fontName="3of9", fontSize=30))
#     # label.add(shapes.String(2, 55, str(obj[4]), fontName="Helvetica", fontSize=14))


def make_barcode(code, acft):
    leading = '000'
    if acft == 'luh':
        leading = '720'
    elif acft == 'apache':
        leading = '640'
    code = leading + str(code)
    ean = barcode.get('ean13', code, writer=ImageWriter())
    filename = ean.save('barcodes/{}'.format(code))
    return filename
# Create the sheet.
sheet = labels.Sheet(specs, draw_label_top_bc, border=False)
# trying to make barcode
# ean = barcode.get('ean13', '1234121231234', writer=ImageWriter())
# filename = ean.save('ean13')

# sheet.partial_page(1, ((1, 1), (2, 2), (4, 2)))
# Add a couple of labels.
s = '1234121231234'
n = '{}-{}-{}-{}'.format(s[:-9],s[-9:-7],s[-7:-4],s[-4:])
# sheet.add_label([ 'Nomenclature','Part No.', 'Location', '1234121231234',n, ''])
for row in db:
    if row[3] != '':
        nsn = '{}-{}-{}-{}'.format(row[4][:-9],row[4][-9:-7],row[4][-7:-4],row[4][-4:])
        sheet.add_label([row[0],row[1],row[2],row[3],nsn, row[5]])
# sheet.add_label("Hello")
# sheet.add_label("World")
コード例 #20
0
ファイル: partial_page.py プロジェクト: svvitale/pylabels
# labels. Each label is 90mm x 25mm with a 2mm rounded corner. The margins are
# automatically calculated.
specs = labels.Specification(210, 297, 2, 8, 90, 25, corner_radius=2)


# Create a function to draw each label. This will be given the ReportLab drawing
# object to draw on, the dimensions (NB. these will be in points, the unit
# ReportLab uses) of the label, and the object to render.
def draw_label(label, width, height, obj):
    # Just convert the object to a string and print this at the bottom left of
    # the label.
    label.add(shapes.String(2, 2, str(obj), fontName="Helvetica", fontSize=40))


# Create the sheet.
sheet = labels.Sheet(specs, draw_label, border=True)

# Mark some of the labels on the first page as already used.
sheet.partial_page(1, ((1, 1), (2, 2), (4, 2)))

# Add a couple of labels.
sheet.add_label("Hello")
sheet.add_label("World")

# Since the second page hasn't started yet, we can mark some of its labels as
# already used too.
sheet.partial_page(2, ((2, 1), (3, 1)))

# We can also add each item from an iterable.
sheet.add_labels(range(3, 22))
    TTFont('Magnus Cederholm', os.path.join(font_path, 'FFF_Tusj.ttf')))
registerFont(
    TTFont('PermanentMarker', os.path.join(font_path, 'PermanentMarker.ttf')))

# load excel and loop through rows
data_file = 'Fallfest Barcode File.xlsx'
sheet_name = 'Barcodes'

# parse data and create
records = load_records_from_excel(data_file, sheet_name)
tag = process_records(records)
tag = fix_tags(tag)

# create the sheet with callback function write_data to process each record
specs = createAvery5160Spec()
sheet = labels.Sheet(specs, write_data, border=True)

if (DEBUG_PRINT):
    debug_print_tags(tag)
else:
    if (PRINT_BY_ROW):
        print_tags_by_row(tag)
    else:
        print_tags_by_column(tag)
    #endif
#endif

# save results in pdf
sheet.save('nametags.pdf')
print("{0:d} label(s) output on {1:d} page(s).".format(sheet.label_count,
                                                       sheet.page_count))
コード例 #22
0
                    strokeWidth=1,
                    fillColor=None))
    label.add(
        shapes.String(width - 46,
                      height - 36,
                      part["id36"],
                      fontName="Consolas Bold",
                      fontSize=10))
    # moved above the line.
    # label.add(shapes.String(width - 50, height - 110, "ID36", fontName="Consolas Bold", fontSize=8))
    # removed manufacturer
    # label.add(shapes.String(10, height - 115, part["1stmanufacturer"], fontName="Consolas Bold", fontSize=6))


# Create the sheet. Use border to see the outline on an A4 sheet,
# disable for printing on the actual envelopes (due to printer skew)
# sheet = labels.Sheet(specs, draw_label, border=True)
sheet = labels.Sheet(specs, draw_label, border=False)

# Create labels
for part in parts:
    sheet.add_label(part)

sheet.save('labels.pdf')

print("{0:d} label(s) output on {1:d} page(s).".format(sheet.label_count,
                                                       sheet.page_count))

# if sheet.label_count > 1:
# os.startfile(r'labels.pdf')
コード例 #23
0
ファイル: old_PDF_printer.py プロジェクト: matt-dale/designdb
    def save_breakout_sheet(self, labelsToPrint):
        breakouts = labelsToPrint

        SmallSheetHeads = labelPrinter.Sheet(self.smallSpecs,
                                             self.draw_cable_label,
                                             border=self.drawBorder)

        LargeSheetHeads = labelPrinter.Sheet(self.largeSpecs,
                                             self.draw_cable_label,
                                             border=self.drawBorder)

        BreakoutTailSheet = labelPrinter.Sheet(self.smallSpecs,
                                               self.draw_breakout_tail_label,
                                               border=self.drawBorder)

        OneBlockSheet = labelPrinter.Sheet(self.oneBlock5160,
                                           self.draw_oneBlock_label,
                                           border=self.drawBorder)
        # create lists of various things to print

        # first print small label heads
        smallLabelHeads = []
        # then print large label heads
        largeLabelHeads = []
        # then print male breakout tails
        maleBreakoutTails = []
        # then print female breakout tails
        femaleBreakoutTails = []

        for breakout in breakouts:
            if breakout.cableBreakout.mainLabelType == Label.objects.get(
                    description__icontains='5167'):
                smallLabelHeads.append(breakout)
            if breakout.cableBreakout.mainLabelType == Label.objects.get(
                    description__icontains='5160'):
                largeLabelHeads.append(breakout)
            breakoutTails = breakout.projectcablebreakoutpair_set.all()
            if 'Male' in breakout.cableBreakout.gender:
                maleBreakoutTails.append(breakoutTails)
            if 'Female' in breakout.cableBreakout.gender:
                femaleBreakoutTails.append(breakoutTails)
        """
        topLeft = str(obj[0])
        bottomLeft = str(obj[1])
        topRight = str(obj[2])
        bottomRight = str(obj[3])
        middleCenter = str(obj[4])
        bottomCenter = str(obj[5])
        """
        for b in smallLabelHeads:
            cable = b.cable
            topLeft = b.cableBreakout.breakoutName + ' ' + b.cableBreakout.gender
            try:
                if b.originOrDestination == 'origin':
                    bottomLeft = '@' + cable.origin.locationDescription
                else:
                    bottomLeft = '@' + cable.destination.locationDescription
            except:
                bottomLeft = ''
            bottomRight = ''
            aBundle = False
            if len(cable.cableName) > 11:
                name = cable.code
            else:
                name = cable.cableName
            data = [
                topLeft, bottomLeft, '', bottomRight, name, '', aBundle,
                'Small'
            ]
            SmallSheetHeads.add_label(data)

        if SmallSheetHeads.page_count != 0:
            theSheet = self.printdirectory + '01SmallBreakoutHeadLabels.pdf'
            SmallSheetHeads.save(theSheet)
            self.smallSheets.append(theSheet)
            self.smallPageCount += SmallSheetHeads.page_count

        for b in largeLabelHeads:
            cable = b.cable
            topLeft = b.cableBreakout.breakoutName + ' ' + b.cableBreakout.gender
            try:
                if b.originOrDestination == 'origin':
                    bottomLeft = '@' + cable.origin.locationDescription
                else:
                    bottomLeft = '@' + cable.destination.locationDescription
            except:
                bottomLeft = ''
            aBundle = False
            bottomRight = ''
            if len(cable.cableName) > 11:
                name = cable.code
            else:
                name = cable.cableName
            data = [
                topLeft, bottomLeft, '', bottomRight, name, '', aBundle,
                'Large'
            ]
            if cable.cable.cableType in ['06Pr Mult', '03Pr Mult']:
                print cable
                data[4] = cable.code
                OneBlockSheet.add_label(data)
            else:
                LargeSheetHeads.add_label(data)

        if LargeSheetHeads.page_count != 0:
            theSheet = self.printdirectory + '05LargeBreakoutHeadLabels.pdf'
            LargeSheetHeads.save(theSheet)
            self.largeSheets.append(theSheet)
            self.largePageCount += LargeSheetHeads.page_count

        if OneBlockSheet.page_count != 0:
            theSheet = self.printdirectory + '07LargeBreakoutHeadLabels.pdf'
            OneBlockSheet.save(theSheet)
            self.largeSheets.append(theSheet)
            self.largePageCount += OneBlockSheet.page_count

        for x in maleBreakoutTails:
            for b in x:
                """
                topLeft = str(obj[0])
                bottomLeft = str(obj[1])
                topRight = str(obj[2])
                bottomRight = str(obj[3])
                middleCenter = str(obj[4])
                bottomCenter = str(obj[5])

                <div class="SmallLabelRightNumber">{{ pair.tailPairNumber }}</div>
                <div class="SmallLabelLeftUpperText">@ {{ pair.breakout.whichEnd }}</div>
                <div class="SmallLabelCenterText">{{ pair.tailLabel|sliceLabel:'10' }}</div>
                <div class="SmallLabelLeftText">{{ pair.breakout.cableBreakout.getShortName }}</div>
                <div class="SmallLabelRightText">{{ pair.breakout.cable.cableName }}</div>
                """
                printObj = []
                topLeft = '@ ' + b.breakout.whichEnd
                bottomLeft = ''
                topRight = b.breakout.cableBreakout.getShortName()
                name = b.breakout.cable.cableName
                if len(name) > 10:
                    name = b.breakout.cable.code
                #bottomRight = name
                middleCenter = b.tailLabel
                bottomCenter = name + ' ' + b.tailPairNumber
                printObj = [
                    topLeft, bottomLeft, topRight, bottomRight, middleCenter,
                    bottomCenter
                ]
                BreakoutTailSheet.add_label(printObj)

        for x in femaleBreakoutTails:
            for b in x:
                """
                topLeft = str(obj[0])
                bottomLeft = str(obj[1])
                topRight = str(obj[2])
                bottomRight = str(obj[3])
                middleCenter = str(obj[4])
                bottomCenter = str(obj[5])

                <div class="SmallLabelRightNumber">{{ pair.tailPairNumber }}</div>
                <div class="SmallLabelLeftUpperText">@ {{ pair.breakout.whichEnd }}</div>
                <div class="SmallLabelCenterText">{{ pair.tailLabel|sliceLabel:'10' }}</div>
                <div class="SmallLabelLeftText">{{ pair.breakout.cableBreakout.getShortName }}</div>
                <div class="SmallLabelRightText">{{ pair.breakout.cable.cableName }}</div>
                """
                printObj = []
                topLeft = '@ ' + b.breakout.whichEnd
                bottomLeft = ''
                topRight = b.breakout.cableBreakout.getShortName()
                name = b.breakout.cable.cableName
                if len(name) > 10:
                    name = b.breakout.cable.code
                #bottomRight = name
                middleCenter = b.tailLabel
                bottomCenter = name + ' ' + b.tailPairNumber
                printObj = [
                    topLeft, bottomLeft, topRight, bottomRight, middleCenter,
                    bottomCenter
                ]
                BreakoutTailSheet.add_label(printObj)

        theSheet = self.printdirectory + '02BreakoutTailLabels.pdf'
        BreakoutTailSheet.save(theSheet)
        self.smallSheets.append(theSheet)
        self.smallPageCount += BreakoutTailSheet.page_count
コード例 #24
0
ファイル: preview.py プロジェクト: svvitale/pylabels
        font_size *= 0.8
        name_width = stringWidth(name, "KatamotzIkasi", font_size)

    # Write out the name in the centre of the label with a random colour.
    s = shapes.String(width / 2.0, 15, name, textAnchor="middle")
    s.fontName = "KatamotzIkasi"
    s.fontSize = font_size
    s.fillColor = random.choice(
        (colors.black, colors.blue, colors.red, colors.green))
    label.add(s)


# Create the sheet. As we only intend to preview pages 1 and 3, there is no
# point in actually calling the drawing function for other pages. We can tell
# the constructor this and save some overhead.
sheet = labels.Sheet(specs, write_name, border=True, pages_to_draw=[1, 3])
sheet.partial_page(1, ((1, 1), (2, 2), (4, 2)))

# Use an external file as the data source. NB. we need to remove the newline
# character from each line.
with open(os.path.join(base_path, "names.txt")) as names:
    sheet.add_labels(name.strip() for name in names)

# Save the previews.
sheet.preview(1, 'nametags_page1.png')
sheet.preview(3, 'nametags_page3.jpg', format='jpg')

# Note that we can still save a PDF from here, but only pages 1 and 3 will have
# content since we told the constructor those were all we wanted.
sheet.save('nametags_from_preview.pdf')
コード例 #25
0
def gen_nametags(competition_name, persons):
    ### Initialize font
    registerFont(TTFont('Trebuchet', NAMETAG_FONT_PATH))

    # Format information for nametags: DIN-A4 layout with 2 rows of 4 nametags each with a size of 85x55mm
    specs = labels.Specification(210, 297, 2, 4, 85, 55)

    # Local function for nametag layout. Heavily uses add_text_field and is passed to sheet creation
    # obj is one list element of persons, i.e. one dict from utils/data_from_WCIF.get_nametag_data()
    def create_nametag(label, width, height, obj):
        competition_name = obj[0]
        person = obj[1]

        # Write competition name, competitor name and nation
        add_text_field(label,
                       competition_name,
                       width / 2.0,
                       height - 25,
                       max_width=width - 5,
                       max_font_size=50,
                       font="Helvetica")

        name = person['name']
        # Add delegate / organizer color
        if person['delegate']:
            name_color = colors.red
            name = name + " (Delegate)"  # Eventually replace with
        elif person['organizer']:
            name_color = colors.red
            name = name + " (Orga)"  # emoji support (see constants at top of file)
        else:
            name_color = colors.black

        add_text_field(label,
                       name,
                       width / 2.0,
                       height / 2.0,
                       max_width=width - 5,
                       max_font_size=25,
                       color=name_color)

        add_text_field(label,
                       person['nation'],
                       width / 2.0,
                       height / 3.0,
                       max_width=150,
                       max_font_size=20,
                       color=colors.black)

        if person['wcaId'] == None:
            # Add newcomer label
            add_text_field(label,
                           "Newcomer!",
                           width / 2.0,
                           FOOTER_HEIGHT,
                           font_size=30,
                           color=colors.green)
        else:
            # Add 3x3 PBs, comp_count and Best
            if person['_3x3']['single'] != -1 and person['_3x3'][
                    'average'] != -1:
                rubiks_text = "3x3 PBs: {} S / {} A".format(
                    format_result(person['_3x3']['single']),
                    format_result(person['_3x3']['average']))
                if (person['best']['eventName'] != '3x3x3'):
                    add_text_field(label,
                                   rubiks_text,
                                   FOOTER_SIDE_MARGIN,
                                   FOOTER_HEIGHT + 10,
                                   font_size=10,
                                   color=colors.blue,
                                   position="start")

            best_text = "Best World Ranking: {} ({} {} of {})".format(
                person['best']['ranking'], person['best']['eventName'],
                person['best']['type'],
                format_result(person['best']['result'],
                              person['best']['eventName']))
            add_text_field(label,
                           best_text,
                           FOOTER_SIDE_MARGIN,
                           FOOTER_HEIGHT,
                           max_width=width - 20,
                           max_font_size=10,
                           color=colors.blue,
                           position="start")

            comp_count = "Competition # " + str(person['numComps'] + 1)
            add_text_field(label,
                           comp_count,
                           width - FOOTER_SIDE_MARGIN,
                           FOOTER_HEIGHT + 10,
                           font_size=10,
                           color=colors.blue,
                           position="end")

    # Create the sheet and add labels
    sheet = labels.Sheet(specs, create_nametag, border=True)
    sheet.add_labels((competition_name, person) for person in persons)

    # Check if folder is there or create, and safe in folder
    competition_name_stripped = competition_name.replace(" ", "")
    if not os.path.exists(competition_name_stripped):
        os.makedirs(competition_name_stripped)

    nametag_file = competition_name_stripped + '/Nametags.pdf'
    sheet.save(nametag_file)
    print("{0:d} nametags output on {1:d} pages.".format(
        sheet.label_count, sheet.page_count))
コード例 #26
0
def load_people(filename='people.json'):
    with open('people.json', 'r') as infile:
        return json.load(infile)

# 215.9 by 279.4
def write_label(label, width, height, person):
    text = "\n".join((person['name'], person['addresses'][0]))
    lab = Label()
    lab.setOrigin(8, height - 5)
    lab.fontSize = 14
    lab.setText(text)
    lab.boxAnchor = 'nw'
    label.add(lab)

if __name__ == '__main__':
    people = load_people()
    for person in people:
        if len(person['addresses']) > 1:
            print "WARNING: {} has too many addresses!".format(person['name'])
        elif not person['addresses']:
            print "WARNING: {} has NO addresses!".format(person['name'])
    people = [ person for person in people if len(person['addresses']) == 1 ]

    OUT_FILENAME = 'labels.pdf'
    sheet = labels.Sheet(specs, write_label, border=BORDER)
    sheet.add_labels(people)
    with open(OUT_FILENAME, 'wb') as outfile:
        sheet.save(outfile)
    print "Wrote {}".format(OUT_FILENAME)
コード例 #27
0
    # Write the title.
    label.add(shapes.String(5, height-20, "Hello, my name is",
                            fontName="Judson Bold", fontSize=20))

    # Measure the width of the name and shrink the font size until it fits.
    font_size = 50
    text_width = width - 10
    name_width = stringWidth(name, "KatamotzIkasi", font_size)
    while name_width > text_width:
        font_size *= 0.8
        name_width = stringWidth(name, "KatamotzIkasi", font_size)

    # Write out the name in the centre of the label with a random colour.
    s = shapes.String(width/2.0, 15, name, textAnchor="middle")
    s.fontName = "KatamotzIkasi"
    s.fontSize = font_size
    s.fillColor = random.choice((colors.black, colors.blue, colors.red, colors.green))
    label.add(s)

# Create the sheet.
sheet = labels.Sheet(specs, write_name, border=True)
sheet.partial_page(1, ((1, 1), (2, 2), (4, 2)))

# Use an external file as the data source. NB. we need to remove the newline
# character from each line.
with open(os.path.join(base_path, "names.txt")) as names:
    sheet.add_labels(name.strip() for name in names)

# Save the file and we are done.
sheet.save('nametags.pdf')
print("{0:d} label(s) output on {1:d} page(s).".format(sheet.label_count, sheet.page_count))
コード例 #28
0
ファイル: addresses.py プロジェクト: avivey/pylabels
    _, _, lx, ly = label.getBounds()
    _, _, gx, gy = group.getBounds()

    # Make sure the label fits in a sticker
    assert gx <= lx, (address, gx, lx)
    assert gy <= ly, (address, gy, ly)

    # Move the content to the center of the sticker
    dx = (lx - gx) / 2
    dy = (ly - gy) / 2
    group.translate(dx, dy)

    label.add(group)


sheet = labels.Sheet(specs, draw_address, border=False)

filename = 'addresses.csv'
with open(filename, newline='') as csvfile:
    reader = csv.DictReader(csvfile, Address._fields, quotechar='"')
    for row in reader:
        # Make sure we got all fields, and no extra fields.
        assert None not in row, row['name']
        assert 'zip' in row, row['name']
        for k, v in row.items():
            row[k] = v.strip()

        address = Address(**row)

        sheet.add_label(address)
コード例 #29
0
ファイル: old_PDF_printer.py プロジェクト: matt-dale/designdb
    def save_cable_sheet(self, labelsToPrint, smallOrLarge):
        cables = labelsToPrint
        if smallOrLarge == 'Small':
            sheet = labelPrinter.Sheet(self.smallSpecs,
                                       self.draw_cable_label,
                                       border=self.drawBorder)
        elif smallOrLarge == 'Large':
            sheet = labelPrinter.Sheet(self.largeSpecs,
                                       self.draw_cable_label,
                                       border=self.drawBorder)
        elif smallOrLarge == 'OneBlock':
            sheet = labelPrinter.Sheet(self.oneBlock5160,
                                       self.draw_oneBlock_label,
                                       border=self.drawBorder)

        for cable in cables:
            # loop through twice, first for origin, second for destination
            #cableType = topLeft
            topLeft = str(cable.cable.cableType) + ' ' + str(cable.length)
            try:
                bottomLeft = str(cable.getOriginGender()
                                 ) + '@' + cable.origin.locationDescription
            except:
                bottomLeft = str(cable.getOriginGender())
            if cable.aBundle != None:
                bottomRight = cable.aBundle.name
                aBundle = True
            else:
                bottomRight = ''
                aBundle = False
            if smallOrLarge == 'OneBlock':
                name = cable.code
            else:
                if len(cable.cableName) > 11:
                    name = cable.code
                else:
                    name = cable.cableName
            data = [
                topLeft, bottomLeft, '', bottomRight, name, '', aBundle,
                smallOrLarge
            ]
            sheet.add_label(data)

        # add a label break here. Origins Up here, Destinations down here
        # we should pad the row so that it works for both template types
        # pad the row until it is a new row
        currentPosition = sheet._position  # returns [row#, column#]

        if smallOrLarge == 'Small':
            columnCount = self.smallSpecs.columns
        elif smallOrLarge == 'Large':
            columnCount = self.largeSpecs.columns
        elif smallOrLarge == 'OneBlock':
            columnCount = self.largeSpecs.columns
        # if the current column# doesn't equal the amount of columns, pad out the labels
        while currentPosition[1] != columnCount:
            sheet.add_label(['', '', '', '', '', '', '', smallOrLarge])
            currentPosition = sheet._position
        if smallOrLarge == 'Small' or smallOrLarge == 'Large':
            sheet.add_label(
                ['', '', '', '', 'Origin Above', '', '', smallOrLarge])
            sheet.add_label(
                ['', '', '', '', '__Destination__', '', '', smallOrLarge])
            sheet.add_label(
                ['', '', '', '', 'Labels Below', '', '', smallOrLarge])
            if smallOrLarge == 'Small':
                if self.settings.smallLabelTemplate == 'Avery 5167':
                    sheet.add_label(['', '', '', '', '', '', '', smallOrLarge])

        for cable in cables:
            # loop through twice, first for origin, second for destination
            #cableType = topLeft
            topLeft = str(cable.cable.cableType) + str(cable.length)
            try:
                bottomLeft = str(cable.getDestinationGender(
                )) + '@' + cable.destination.locationDescription
            except:
                bottomLeft = str(cable.getDestinationGender())
            if cable.aBundle != None:
                bottomRight = cable.aBundle.name
            else:
                bottomRight = ''
            if smallOrLarge == 'OneBlock':
                name = cable.code
            else:
                if len(cable.cableName) > 11:
                    name = cable.code
                else:
                    name = cable.cableName
            aBundle = False
            data = [
                topLeft, bottomLeft, '', bottomRight, name, '', aBundle,
                smallOrLarge
            ]
            sheet.add_label(data)

        if smallOrLarge == 'Large':
            theSheet = self.printdirectory + '03' + smallOrLarge + 'CableLabels.pdf'
            self.largeCableLabels = theSheet
            self.largeSheets.append(theSheet)
            self.largePageCount += sheet.page_count

        if smallOrLarge == 'OneBlock':
            theSheet = self.printdirectory + '04' + smallOrLarge + 'CableLabels.pdf'
            self.largeCableLabels = theSheet
            #self.largeSheets.append(theSheet)
            self.largePageCount += sheet.page_count

        elif smallOrLarge == 'Small':
            theSheet = self.printdirectory + '00' + smallOrLarge + 'CableLabels.pdf'
            self.smallSheets.append(theSheet)
            self.smallCableLabels = theSheet
            self.smallPageCount += sheet.page_count

        sheet.save(theSheet)
        return sheet
コード例 #30
0
from reportlab.graphics import shapes

# Create an A4 portrait (210mm x 297mm) sheets with 2 columns and 8 rows of
# labels. Each label is 90mm x 25mm with a 2mm rounded corner. The margins are
# automatically calculated.
specs = labels.Specification(210, 297, 2, 8, 90, 25, corner_radius=2)


def draw_label(label, width, height, obj):
    # Just convert the object to a string and print this at the bottom left of
    # the label.
    label.add(shapes.String(2, 2, str(obj), fontName="Helvetica", fontSize=12))


# Create the sheet.
sheet = labels.Sheet(specs, draw_label)

# Add a couple of labels.
sheet.add_label("Hello" + "\n" + "Workd")
sheet.add_label("World")

# We can also add each item from an iterable.
sheet.add_labels(range(3, 22))

# Note that any oversize label is automatically trimmed to prevent messing up
# other labels.
sheet.add_label("Oversized label here")

# Save the file and we are done.
sheet.save('basic.pdf')