1樓:匿名使用者
條形碼作為一種機器可識別的圖形,它能快速、準確地標識某種產品或商品,在許多資料庫應用中起作很重要的作用,如超市收銀、車站售票等場合。當某件物品上帶有的條形碼被條碼掃描器正確解讀後,將會得到該物品的唯一標識字串,通過檢索資料庫我們就可以很容易知道它的一些其它屬性並作相應處理。雖然在internet上能找到許多免費和不免費的條形碼列印控制元件,但是這些控制元件除了使用不方便外,還有一個最大的缺點:
它們的列印輸出不能和我們的程式共存在一個列印頁面上,比如說在一個過程中,我們先向系統 printer 中輸出一些內容,然後再呼叫控制元件的條形碼列印方法,最後列印的結果為兩頁!,如果現在我們要處理一張車票,上面不僅要列印條形碼,還要有終點站和票價等資訊,那麼控制元件就變得不可用。對程式設計師來說,可能還是希望能瞭解條形碼列印的原理,本文提出兩種列印方法與同行們**。
一、直接利用有條形碼列印功能的印表機
有許多印表機能夠直接列印條形碼,但在 vb 中,我們在dos時代熟悉的lprint語句已經不能再使用了,列印操作被windows的spool系統完全接管,輸出是以「頁」為單位,所有的列印輸出都被windows轉換為圖形傳送給列印驅動程式。而要使印表機列印條形碼就必須將對應的esc序列直接傳送給它,因此我們就要想辦法避開windows的spool系統,也就是說再程式中不能使用printer物件和printers集合處理列印輸出,在vb中要將esc指令直接傳送給印表機至少有三種方法,前兩種方法是呼叫windows api 函式:escape()和spoolfile(),第三種是最容易的方法:
開啟印表機埠進行二進位制存取,我們主要考慮這種方法。
即使在windows時代,」lpt1:」和」prn」仍然是可用的,下面我們先作一個試驗:開啟一個dos視窗,在提示符下輸入copy con lpt1:
回車,然後隨便輸入一些字元,最後按f6鍵,印表機就開始工作了,它將列印出你輸入的那些字元!下面的**演示了直接將指令和字元傳送給印表機:
private sub command1_click()
dim strout as string
strout = 「這是直接傳送到印表機埠的字串」
『 開啟印表機埠,其中的」lpt1:」可能需要根據你的印表機設定而改變
open 「lpt1:」 for binary access write as #1
『 傳送給印表機,注意語句的最後一個引數必須是變數
put #1, ,strout
『 關閉印表機埠
close #1
end sub
各種印表機列印條形碼的指令可能不同,比如將上面的變數 strout賦值為:
strout = chr(28) & 「p」 & chr(5) & chr(2) & chr(3) & chr(3) & chr(6) & 「012345」
將在 ar2400 印表機上列印出內容為」012345」的 code39 格式的條形碼。具體的列印控制指令請參考印表機手冊。
用這種方法的缺點:一是過份依賴印表機本身,而有條形碼列印功能的印表機通常要比普通印表機昂貴,這會使構造應用系統不夠經濟;二是所有的列印輸出都必須你自己處理,比如列印定位就很浪費時間。
二、利用畫圖方式輸出到普通印表機
條形碼的編碼規則不外乎是通過線條和線條間間隙的寬窄不同來表示二進位制的1和0,只要我們瞭解了條形碼的編碼規則,完全可以用畫圖的方式在普通印表機上得到可以接受的效果。下面我們就使用最普遍的code39碼進行討論。
code39碼的編碼規則是:
1、 每五條線表示一個字元;
2、 粗線表示1,細線表示0;
3、 線條間的間隙寬的表示1,窄的表示0;
4、 五條線加上它們之間的四條間隙就是九位二進位制編碼,而且這九位中必定有三位是1,所以稱為39碼;
5、 條形碼的首尾各一個*標識開始和結束
在我們的程式中,給常用的字元都進行編碼,解讀時先取線條粗細,再取間隙寬窄,如:
上圖中的字元*就可以解讀為 001101000,字元3解讀為 110000100
下面就是我們給出的子過程:
註釋: 將字串 strbarcode 對應的條形碼輸出到預設印表機
private sub printbarcode( _
byval strbarcode as string, _
optional byval intxpos as integer = 0, _
optional byval intypos as integer = 0, _
optional byval intprintheight as integer = 10, _
optional byval bolprinttext as boolean = true _
)註釋: 引數說明:
註釋: strbarcode - 要列印的條形碼字串
註釋: intxpos, intypos - 列印條形碼的左上角座標(預設為(0,0),座標刻度為:毫米)
註釋: intheight - 列印高度(預設為一釐米,座標刻度為:毫米)
註釋: bolprinttext - 是否列印人工識別字元(預設為true)
註釋: "0"-"9","a-z","-","%","$"和"*" 的條碼編碼格式,總共 40 個字元
static strbartable(39) as string
註釋: 初始化條碼編碼格式表
strbartable(0) = "001100100" 註釋: 0
strbartable(1) = "100010100" 註釋: 1
strbartable(2) = "010010100" 註釋: 2
strbartable(3) = "110000100" 註釋: 3
strbartable(4) = "001010100" 註釋: 4
strbartable(5) = "101000100" 註釋: 5
strbartable(6) = "011000100" 註釋: 6
strbartable(7) = "000110100" 註釋: 7
strbartable(8) = "100100100" 註釋: 8
strbartable(9) = "010100100" 註釋: 9
strbartable(10) = "100010010" 註釋: a
strbartable(11) = "010010010" 註釋: b
strbartable(12) = "110000010" 註釋: c
strbartable(13) = "001010010" 註釋: d
strbartable(14) = "101000010" 註釋: e
strbartable(15) = "011000010" 註釋: f
strbartable(16) = "000110010" 註釋: g
strbartable(17) = "100100010" 註釋: h
strbartable(18) = "010100010" 註釋: i
strbartable(19) = "001100010" 註釋: j
strbartable(20) = "100010001" 註釋: k
strbartable(21) = "010010001" 註釋: l
strbartable(22) = "110000001" 註釋: m
strbartable(23) = "001010001" 註釋: n
strbartable(24) = "101000001" 註釋: o
strbartable(25) = "011000001" 註釋: p
strbartable(26) = "000110001" 註釋: q
strbartable(27) = "100100001" 註釋: r
strbartable(28) = "010100001" 註釋: s
strbartable(29) = "001100001" 註釋: t
strbartable(30) = "100011000" 註釋: u
strbartable(31) = "010011000" 註釋: v
strbartable(32) = "110001000" 註釋: w
strbartable(33) = "001011000" 註釋: x
strbartable(34) = "101001000" 註釋: y
strbartable(35) = "011001000" 註釋: z
strbartable(36) = "000111000" 註釋: -
strbartable(37) = "100101000" 註釋: %
strbartable(38) = "010101000" 註釋: $
strbartable(39) = "001101000" 註釋: *
if strbarcode = "" then exit sub 註釋: 不列印空串
註釋: 儲存印表機 scalemode
dim intoldscalemode as scalemodeconstants
intoldscalemode = printer.scalemode
註釋: 儲存印表機 drawwidth
dim intolddrawwidth as integer
intolddrawwidth = printer.drawwidth
註釋: 儲存印表機 font
dim fntoldfont as stdfont
set fntoldfont = printer.font
printer.scalemode = vbtwips 註釋: 設定列印用的座標刻度為緹(twip=1)
printer.drawwidth = 1 註釋: 線寬為 1
printer.fontname = "宋體" 註釋: 列印在條碼下方字元的字型和大小
printer.fontsize = 10
dim strbc as string 註釋: 要列印的條碼字串
strbc = ucase(strbarcode)
註釋: 將以毫米表示的 x 座標轉換為以緹表示
條形碼如何申請,如何收費,條形碼如何申請,如何收費?
青島小魚聊創業 1 申請人可到所在地的編碼分支機構辦理申請廠商識別 手續,並提供企業法人營業執照或營業執照及其影印件三套。分別由中國物品編碼中心 申請人所在地的編碼分支機構和申請人所在企業內部存檔保留 3 集團公司請填集團公司下屬分公司基本資訊表。4 申請人的申請資料經所在地的編碼分支機構初審後,符...
如何選擇條形碼標準,如何選擇條形碼標準 5
遊樂裝置 商品條形碼的標準尺寸是37.29mmx26.26mm,放大倍率是0.8 2.0 當印刷面積允許時,應選擇1.0倍率以上的條形碼,以滿足識讀要求。放大倍數越小的條形碼,印刷精度要求越高,當印刷精度不能滿足要求時,易造成條形碼識讀困難。商品條形碼是指由一組規則排列的條 空及其對應字元組成的標識...
製作條形碼,怎麼製作條形碼?
這就是最常見的ean 13碼,只要選對了條碼型別就可以了.開始沒有仔細看,數字確實是14位.仔細研究了一下,你這個條碼有問題 1 看條碼的圖形,是ean 13無疑,這種條碼不可能表示14位數字,因為它是定長的,只能表示13位。2 從數字上看,是商品條碼,因為最後一位數字是符合校驗碼的規則的。如果數字...