• 5610阅读
  • 9回复

QT 怎么实现连续纸张的打印 [复制链接]

上一主题 下一主题
离线zhenwoln
 

只看楼主 正序阅读 楼主  发表于: 2009-05-14
目前正在使用QT,想实现打印功能,,不能使用打印预览,当有需要打印的内容的时候,自动实现打印,打印机用的是微型打印机,纸张是连续的,不知道有没有人实现过类似的功能?希望能够得到大家的帮助,非常感谢!
离线zhenwoln

只看该作者 9楼 发表于: 2009-05-19
非常感谢,我慢慢研究下
离线sundp

只看该作者 8楼 发表于: 2009-05-18
这个程序需要操作lp端口,所以运行此程序的用户要被赋予“lp“的权限,在用户管理里面做。
这四个函数,第一个打开端口,第二个关闭端口,第三个送单个字符,第四个送字串。我在我们单位的挂号程序里就是这么用的。
先打开端口,再送字符或字串,再关闭端口。
送字串函数开头送的两个字符,是我的打印机的打印方式控制码,你可以查你自己的打印机手册,看你应该用什么控制码。
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/parport.h>
#include <linux/ppdev.h>

//
inline int prtBegin()
{
    int fd= open("/dev/lp0", O_WRONLY);
    if ( fd < 0) {
        QMessageBox::warning(0,"ERROR","open paraport error!");
        return -1;
    }else{
        return fd;
    }
}
//
inline void prtEnd(int fd)
{
    ::close(fd);
}
//
inline bool prtChar(int fd,char ch)
{
    if(write(fd,&ch,1)!=1){
        QMessageBox::warning(0,"ERROR","write paraport error with character"+QString::number(ch)+" !");
        return false;
    }
    return true;
}
//
inline bool prtLine(int fd,QString str,int h,int w)
{
    if(!prtChar(fd,27))return false;
    if(!prtChar(fd,33))return false;
    char tmp=0;
    if(h==1)    {
        tmp=tmp | 0x10;
    }else if(h!=0){
        QMessageBox::warning(0,"ERROR","prtLine parameter h error  !");
        return false;
    }
    if(w==1)    {
        tmp=tmp | 0x20;
    }else if(w!=0){
        QMessageBox::warning(0,"ERROR","prtLine parameter w error  !");
        return false;
    }
    if(!prtChar(fd,tmp))return false;
    QTextCodec *codec = QTextCodec::codecForName("GBK");
    QByteArray encstr = codec->fromUnicode(str);
    int len=encstr.length();
    if(write(fd,encstr,len)!=len){
        QMessageBox::warning(0,"ERROR","write paraport error with "+str+" !");
        return false;
    }
    return true;
}
[ 此帖被sundp在2009-05-18 21:52重新编辑 ]
人境结庐<http://sundp70.blog.163.com>心远地偏
离线lugaideath

只看该作者 7楼 发表于: 2009-05-18
不明白你的意思!
离线zhenwoln

只看该作者 6楼 发表于: 2009-05-17
感谢sundp! 你的想法跟我要实现的很相似,我是个新手,对linux还不是很熟练,能不能麻烦你说的详细一点,我的打印机是连接的并口。
非常感谢!!!
离线sundp

只看该作者 5楼 发表于: 2009-05-15
直接从端口送打印指令过去,简单得很。
具体指令查打印机手册,看看它支持什么命令集。
人境结庐<http://sundp70.blog.163.com>心远地偏
离线zhenwoln

只看该作者 4楼 发表于: 2009-05-15
难道真的没人吗?
离线chao_rap
只看该作者 3楼 发表于: 2009-05-15
没研究过

帮LZ顶下
离线zhenwoln

只看该作者 2楼 发表于: 2009-05-15
没人会吗?在线等,谢谢大家
离线zhenwoln

只看该作者 1楼 发表于: 2009-05-14
希望大家多帮帮忙啊
快速回复
限100 字节
 
上一个 下一个