2016-05-09 2 views
0

私は_____のように印刷された紙に線を引きたいと、以下の画像は、私のフォントビットマップがfont bitmapsverifone vx520で接続された文字を印刷する方法は?

であると私は、プリンタや印刷文字に私のフォントをダウンロードして選択するには、このコードを使用し

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <svc.h> 
#include <printer.h> 

int main() { 
    int retVal; 
    int handle; 
    open_block_t parm; 
    int h_font_file; 
    char print[32] = {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}; 

    handle = open("/dev/com4", 0); 

    memset(&parm, 0, sizeof (parm)); 
    parm.rate = Rt_19200; 
    parm.format = Fmt_A8N1 | Fmt_auto | Fmt_RTS; 
    parm.protocol = P_char_mode; 
    parm.parameter = 0; 
    set_opn_blk(handle, &parm); 
    SVC_WAIT(200); 
    p3700_init(handle, 6); 
    SVC_WAIT(100); 

    /****************SETUP FONT******************/ 
    h_font_file = open("8x16.pft", O_RDONLY); //load font 
    retVal = p3700_dnld_font_file(handle, h_font_file, 2); //set font 
    SVC_WAIT(100); 
    retVal = p3700_select_font(handle, 0x03, 2); 


    retVal = write(handle, print, 32); 

    printf("printf: %d\n", retVal); 

    retVal = write(handle, "\n\n\n\n", 4); 

    SVC_WAIT(100); 

    return 0; 
} 

が、結果は下の画像であり、文字は一緒に接続されていません。この問題を解決するにはどうすればよいですか? result

答えて

2

あなたがしたいのは、水平線を印刷するだけで、新しいフォントを作成するのはおそらく方法ではないと思います。代わりに、水平線だけのグラフィックを作成し、like any other graphicを印刷することを検討してください。

また、端末をグラフィックスモードにして手動で描画することもできますが、これにはさらに手間がかかります。

ドットグラフィックスモードでは、ホストがほぼ完全に制御でき、任意のドット位置にドットを印刷できます。水平および垂直の印刷濃度は、mmあたり8ドットです。ドットグラフィックスモードでは、印刷可能な文字は印刷可能なビットパターンとターミネータの2つの文字グループに細分されます。多種多様なラインターミネータが、受信したビットパターンの印刷方法を決定します。

グラフィックイメージは、1回のパスで1ドット単位で構成されます。 1行分の画像プリント後に1ドットのラインが給紙されます。 イメージのデータは、6ビット単位で順次表示されます。ビット8はパリティに依存します。ビット7は常に1です。残りのビットはグラフィック画像ビットである。グラフィックイメージビットの場合、ビット6は左端のビットで、ビット0は右端です。送信される最初のコードは、一番左のキャリッジ位置を表し、最後の文字は一番右のキャリッジ位置を表します。

メカニズム構成のため、画像データフォーマットは、ドットラインごとに384 ドットとして構成されます。ホストは、1ドットライン当たり最大64のイメージコード、 と1つのターミネータコードを送信できます。

注:イメージコードは、16進数40未満でなければなりません。ターミネーターは、進数だから印刷文字であると定義されている20

未満であってはならない P 1 G G G G G G Pは=「Word形式によって定義されたパリティ」、1 =定数1、およびGは、グラフィックである場合ビット

ターミネータcharは、P = "ワードフォーマットで定義されたパリティ"、0は定数0、1は定数1、 "EXIT"ではグラフィックスモードを終了できます(0 =終了せず、1 =終了)、Xは無視され、 "FEED"は改行を送信することを許可します。

あなたはそれを再生したい場合は、私は、このサンプルコードはそのままで動作するかどうかわからないんだけど、それは少なくともあなたが始める必要があります。

char line[65]; /* room for 64 image codes + 1 terminator code 
       (if using all 64, no line feed should be used 
        as it will drop down on its own) */ 
memset(line, 0, sizeof(line)); 

// ENTER GRAPHICS MODE 
line[0] = ESC; // ESC is defined as 0x1B 
line[1] = 'g'; 
p350_print(hPrinter, line); 

for(int i = 0; i<sizeof(line); i++) 
    line[i] = 0x7F; 

line[sizeof(line)-1] = 0x29; 
p350_print(hPrinter, line); 

最後の注意:私はちょうど探していましたいくつかのコードで私はかなり長い時間前にグラフィックスモードを使用していましたが、私はパリティに注意を払っているようには見えないので、常にゼロになることができます。

+0

プロジェクトでmakefileを作成して使用しますか?私はこの質問[ここ](http:// stackoverflow。com/questions/40127882/how-to-add-library-in-makefile-for-verix)にお答えください。ありがとう –

関連する問題