我想在_____等打印纸上画一条线,下面的图片是我的字体位图
我使用此代码下载并选择我的字体到打印机和打印字符
#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;
}
答案 0 :(得分:2)
如果您只想打印一条水平线,那么我认为创建一个新字体可能不是可行的方法。相反,请考虑制作一个只是水平线的图形并将其打印like any other graphic。
您也可以尝试将终端设置为图形模式并手动绘制,但这需要花费更多精力。从文档(重点添加):
在点图形模式下,主机几乎可以完全控制机构,并可以在任何点位置打印点...水平和垂直打印密度为每毫米8个点。在点图形模式下,可打印字符被细分为两组字符 - 可打印位模式和终止符。各种各样的行终止符决定了接收位模式的打印方式。
图形图像一次构建一个点线。在一行图像打印后,纸张输入一个点线。 图像数据按6位递增顺序显示。位8取决于奇偶校验;第7位始终为1;其余位是图形图像位。对于图形图像位,第6位是最左边的位,第0位是最右边的位。发送的第一个代码表示最左边的托架位置,最后一个字符表示最右边的托架位置,依此类推。
由于机制配置,图像数据格式被构造为384 每点线点。主机每个点线最多可以发送64个图像代码, 和一个终结者代码。
注意:图像代码不得小于十六进制数40;终结符不得少于十六进制数。
因此打印字符被定义为
P 1 G G G G G G
其中P =&#34;奇偶校验由字格式&#34;定义,1 =常数1,G是图形位
终结符char被定义为
P 0 1 0 EXIT X X FEED
其中P =&#34;奇偶校验由字格式&#34;定义,0是常数0,1是常数1,&#34; EXIT&#34;允许你退出图形模式(0 =不退出,1 =退出),X被忽略,&#34; FEED&#34;允许您发送换行符。
我不确定此示例代码是否可以按原样运行,但如果你想使用它,它至少应该让你开始:
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。