非漢字系統(tǒng)下漢字的打印輸出_第1頁
非漢字系統(tǒng)下漢字的打印輸出_第2頁
非漢字系統(tǒng)下漢字的打印輸出_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、摘要介紹了在無漢字字庫的打印機上,無需啟動漢字操作系統(tǒng)打印漢字的方法,并給出了非漢字系統(tǒng)下打印輸出含有漢字的文本文件的實用VC+源程序。 關鍵詞漢字打印,Zebra系列, VC+語言,24*24點陣字庫,文本文件 電腦用戶中,有相當一部分用戶的打印機不帶漢字庫,他們打印輸出漢字的一般方法是,首先啟動漢字操作系統(tǒng),使?jié)h字打印驅動程序駐留內(nèi)存,再把含有漢字的文本文件送打印機輸出,或特定格式的漢字文件經(jīng)應用程序打印輸出;這對于只是單一打印漢字文件,還是比較簡單實用的,但有時在我們自編的應用程序中,只是要打印漢字,而不需要屏幕顯示或鍵盤輸入漢字,在漢字系統(tǒng)下運行應用程序時,會帶來一些副作用,如漢字系統(tǒng)

2、占用內(nèi)存資源、使顯示速度變慢等。若在西文狀態(tài)下,使不帶漢字庫的打印機也能打印輸出漢字,即可避免因啟動漢字系統(tǒng)運行應用程序而帶來的麻煩。 筆者針對上述問題,經(jīng)過分析研究Zebra打印機命令碼,通過VC+語言編程,用矩陣轉置的方法實現(xiàn)了西文狀態(tài)下漢字的打印。 一、非漢字系統(tǒng)下漢字打印實現(xiàn)原理 以目前擁有工業(yè)用戶較多的Zebra系列打印機為例,說明漢字打印實現(xiàn)原理,漢字打印的字摸數(shù)據(jù)來源于UCDOS的24*24點陣字庫。 打印機為用戶提供了自定義字符功能,標準字符存在打印機的ROM中,而用戶自定義字符則存在打印機的RAM中或直接對內(nèi)存進行操作。同時為了避免因文本文件中出現(xiàn)重復漢字或圖形符號造成頻繁讀

3、取字庫而影響文本輸出速度,我們直接對內(nèi)存進行操作。對圖像而言,由于占用內(nèi)存較大,影響運行速度,所以放在RAM中。 把漢字庫字模點陣數(shù)據(jù)作為自定義字符的數(shù)據(jù),在打印機的內(nèi)存中生成自定義字符,再輸出內(nèi)存中的自定義字符,即可在打印機上打印漢字。 打印機自定義下載字符命令為: DGd,t,w,data其中DG為設置打印機為下載圖形模式; d為儲存圖形的目標設備(內(nèi)存地址); t為圖像總的字節(jié)數(shù); w為每行字節(jié)數(shù); data為ASSII為十六進制串圖像定義。因2424點陣打印一個字需要243=72個字節(jié),所以在這里 t=72,w=3。 選擇打印字符集命令為: XGd,t,w其中XG 為打印字符集命令;

4、d為儲存圖形的目標設備(內(nèi)存地址); t為圖像總的字節(jié)數(shù); w為每行字節(jié)數(shù)。 由于24*24點陣打印字庫字模數(shù)據(jù)的存貯序列是按列優(yōu)先的順序,每列的24點用連續(xù)的3個字節(jié)存儲,其順序是按字模的上中下排列,且每個字節(jié)的最高位在上、最低位在下;而Zebra系列打印機打印輸出序列是按行優(yōu)先的順序打印的,因此字模數(shù)據(jù)的存貯序列矩陣需行列轉置變換后才可送打印機打印。 二、漢字文本文件的打印 利用上述原理,可以在自己應用程序中,實現(xiàn)在非漢字系統(tǒng)下,不帶漢字庫的打印機上(或帶漢字庫的打印機設置為英文方式)輸出漢字。 作為應用,用VC+語言編制一打印含有漢字的文本文件的程序。 編程思路如下:置打印機為信函打印質

5、量方式及每英寸10個字符,以使輸出一個漢字和圖形符號占兩個字符位置,處理文本文件中的字串,當字串中遇到漢字時(連續(xù)兩個字符的第一個字符 ASCII 碼大于 175 且第二個字符ASCII碼大于 160),讀取UCDOS的24*24點陣漢字庫HZK24S(宋體)或HZK24F(仿宋體) 或 HZK24K(楷體)或HZK24H(黑體)中該漢字對應的點陣數(shù)據(jù),當字串中遇到圖形符號時(連續(xù)兩個字符ASCII碼的第一個字符ASCII 碼大于 160 小于176且第二個字符ASCII碼大于 160),讀取UCDOS的 24* 24 點陣圖形符號庫HZK24T中該圖形符號對應的點陣數(shù)據(jù),用文本方式或圖形方式

6、輸出該漢字或圖形符號,否則輸出原字符。 根據(jù)以上理解,得出如下讀取漢字字模的算法: 如前面所述,漢字以字模的形式儲存于字庫中,每個漢字在字庫中有唯一的區(qū)位碼與之對應,根據(jù)某一漢字的機內(nèi)碼可以確定其區(qū)位碼及其在字庫中的起始位置,就可以從字庫中取出漢字字模。具體步驟如下: (1)根據(jù)機內(nèi)碼計算漢字的區(qū)位碼 區(qū)碼=機內(nèi)碼高字節(jié)-A1H 位碼=機內(nèi)碼底字節(jié)-A1H (2)根據(jù)區(qū)位碼計算漢字在字庫中的偏移量 漢字在字庫中的偏移量L=(區(qū)碼-m)*94+位碼)*n 其中,m位漢字在字庫中的起始號,n為每個漢字所占的字節(jié)數(shù)。字庫中:偏移量=(區(qū)碼-m)*94+位碼)*(字庫的點陣數(shù)2/8) /*因為一個漢字

7、的每一個點是作為一個位 (bit)處理的,又8位為一個字節(jié)*/ 三、打印漢字文本文件VC+源程序 打印含有漢字的文本文件源程序的主要函數(shù)源代碼如下所示: /* /功能: 將要打印的部分漢字字庫裝入打印機內(nèi)存中 /輸入?yún)?shù): sHz 當前需要初始化的漢字字串 /輸出參數(shù): HZtobyte 漢字點陣字節(jié)流/* #define FONTK_NAME c:Cclibhzk24k/標準24點陣楷體漢字字庫 #define FONTT_NAME c:Cclibhzk24t/標準24點陣漢字索引庫 void CHesnprinterDlg:MakeHZHEX(CString &sHZ,CString &HZtobyte) CFile theFile,theFile_t; CStringcsFileName=FONTK_NAME,csFileName_t=FONTT_NAME; BOOL bOpenOK,bOpenOK_t; HZtobyte=;/ Open the file without the Cre

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論