A Standard Form with Barcodes and Custom Entries
Jump to navigation
Jump to search
Having made a script for generating Code 39 barcodes, I wanted to take this one step further, and use that script inside a larger script that creates a form that I use which has barcodes on it.
Here it is:
consultation.py
One change you might consider in your own form script compared with this one is to not exit when a "bad" character is entered for the barcode. For my purposes, I felt that if I did make a mistake, I would just delete the page and start all over.
#!/usr/bin/env python # consultation.py # created 2010.08.10 import scribus import sys import string def makebars(relx, rely, height, S, humanread): origx = relx code = startstop for x in S[0:]: if x.isdigit(): xnum = int(x) code = code + code39[xnum] elif ((ord(x) > 64) and (ord(x) < 91)): # ord(character) yields the ascii value xnum = ord(x) - 55 code = code + code39[xnum] elif (ord(x) == 32): # space code = code + code39[36] elif ((ord(x) == 36) or (ord(x) == 37)): # $ and % xnum = ord(x) + 1 code = code + code39[xnum] elif ((ord(x) > 44) and (ord(x) < 48)): # - . / xnum = ord(x) - 6 code = code + code39[xnum] elif (ord(x) == 43): # + code = code + code39[42] elif (ord(x) == 42): code = code + startstop # * (adding for completeness) else: scribus.messageBox('OOPS!',S + '\nCode 39 does not encode this character: '+x,scribus.ICON_NONE,button1=scribus.BUTTON_OK) sys.exit(1) code = code + startstop for y in code[0:]: if y == 'n': relx = relx + narrow/2 d = scribus.createLine(relx,rely,relx,rely + height,) #narrow line scribus.setLineWidth(narrow, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) relx = relx + narrow + narrow/2 elif y == 'w': relx = relx + wide/2 d = scribus.createLine(relx,rely,relx,rely + height,) #wide line scribus.setLineWidth(wide, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) relx = relx + narrow + wide/2 elif y == 's': #for wide space relx = relx + wide if (humanread == 'Yes'): t = scribus.createText(origx, rely+height+3, relx - origx, 15) scribus.setText(S, t) scribus.setFont("DejaVu Sans Book", t) scribus.setFontSize(8, t) scribus.setTextAlignment(scribus.ALIGN_CENTERED, t) return code39 = ['nnswwn','wnsnnw','nwsnnw','wwsnnn','nnswnw','wnswnn','nwswnn','nnsnww','wnsnwn','nwsnwn'] # I'm using 'n' to denote a narrow line, 'w' for wide line, 's' for wide space # if a space is not wide then a narrow space is created # next add the codes for A-Z code39.extend(['wnnsnw','nwnsnw','wwnsnn','nnwsnw','wnwsnn','nwwsnn','nnnsww','wnnswn','nwnswn']) code39.extend(['nnwswn','wnnnsw','nwnnsw','wwnnsn','nnwnsw','wnwnsn','nwwnsn','nnnwsw','wnnwsn']) code39.extend(['nwnwsn','nnwwsn','wsnnnw','nswnnw','wswnnn','nsnwnw','wsnwnn','nswwnn']) startstop = 'nsnwwn' narrow = 1.0 # narrow line width wide = 2.2 # wide line width b="Black" #line color ypos = 205.68 if (scribus.newDocument(scribus.PAPER_LETTER,(10,10,10,10),scribus.PORTRAIT,1,scribus.UNIT_POINTS,scribus.PAGE_1,0,1)): #first, we'll make the basic layout for the page L1 = scribus.createLine(25.51,161.57,578.27,161.57) scribus.setLineWidth(0.6,L1) scribus.setLineColor(b,L1) L2 = scribus.createLine(25.51,183.42,578.27,183.42) scribus.setLineWidth(0.6,L2) scribus.setLineColor(b,L2) L4 = scribus.createLine(298.64,161.57,298.64,747.43) scribus.setLineWidth(0.6,L4) scribus.setLineColor(b,L4) while (ypos<750): L3 = scribus.createLine(25.51,ypos,578.27,ypos) scribus.setLineWidth(0.2,L3) scribus.setLineColor(b,L3) ypos=ypos+20.84 T1 = scribus.createText(28,96,120,15) scribus.setText("SCRIBUS MEDICAL CENTER", T1) scribus.setTextAlignment(scribus.ALIGN_LEFT, T1) scribus.setFont("DejaVu Sans Book", T1) scribus.setFontSize(8, T1) T2 = scribus.createText(28,124,148,25) scribus.setText("PHYSICIAN'S ORDERS", T2) scribus.setTextAlignment(scribus.ALIGN_LEFT, T2) scribus.setFont("DejaVu Sans Book", T2) scribus.setFontSize(12, T2) T3 = scribus.createText(25.22,168.29,272.28,16.71) scribus.setText("PHYSICIAN'S ORDERS", T3) scribus.setTextAlignment(scribus.ALIGN_CENTERED, T3) scribus.setFont("DejaVu Sans Book", T3) scribus.setFontSize(11, T3) T4 = scribus.createText(297.75,168.29,279.78,16.71) scribus.setText("PROGRESS NOTES", T4) scribus.setTextAlignment(scribus.ALIGN_CENTERED, T4) scribus.setFont("DejaVu Sans Book", T4) scribus.setFontSize(11, T4) makebars(34,44,30,"5800A",'Yes') # next we get down to getting info about the particular patient names = scribus.valueDialog('Last Name + First Name','Last and first names are\n(Separate with white space only) ') name = names.split() last_name = string.upper(name[0]) first_name = string.upper(name[1]) age_DOB = scribus.valueDialog('Age + DOB','Age and DOB (MM/DD/YYYY) are \n(Separate with white space only)') ageDOB = age_DOB.split() age = ageDOB[0] DOB = ageDOB[1] adm_hospnum = scribus.valueDialog('Admit Date + Hospital Number','Admission Date (MM/DD/YYYY) and\n 10-digit Hospital No.\n(Separate with white space only)') adm_hosp = adm_hospnum.split() adm_Date = adm_hosp[0] hosp_number = adm_hosp[1] MRN = hosp_number[:-3] L = scribus.createText(400, 83, 182, 47) scribus.setText(last_name+", "+first_name+"\n"+hosp_number+" "+adm_Date+"\n"+DOB+" "+age+"Y "+MRN, L) scribus.setTextAlignment(scribus.ALIGN_LEFT, L) scribus.setFont("DejaVu Sans Book", L) scribus.setLineSpacing(10,L) scribus.setFillColor("White",L) scribus.setFontSize(8, L) scribus.setTextDistances(5,0,7,0,L) textLength = len(last_name)+len(first_name)+2 scribus.selectText(0,textLength,L) scribus.setFont("DejaVu Sans Bold",L) makebars(401,125,24,hosp_number,"No") scribus.createLayer("Notes") scribus.setActiveLayer("Notes") N = scribus.createText(299.01, 191.3, 280.36, 557.2) scribus.setText("NEUROLOGY CONSULTATION", N) scribus.setTextAlignment(scribus.ALIGN_LEFT, N) scribus.setFont("DejaVu Sans Book", N) scribus.setLineSpacing(15,N) scribus.setFillColor("White",N) scribus.setFontSize(11, N) scribus.setTextDistances(5,0,0,0,N) scribus.setRedraw(1) scribus.redrawAll() else: scribus.messageBox('OOPS!','Failed to open a new document',scribus.ICON_NONE,button1=scribus.BUTTON_OK) sys.exit(1)