• 5139阅读
  • 3回复

[提问]请教unix下中文打印的问题 [复制链接]

上一主题 下一主题
离线xinqingfly
 

只看楼主 倒序阅读 楼主  发表于: 2008-05-30
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
我在sun下面用qt3.3打印中文的时候,打印机输出的老是乱码,只有数字和字母是正常的,请问大家遇到过没有,交流交流,下面是打印代码:
int main( int argc, char **argv )
{   
    QApplication a( argc, argv );
    qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );
#ifdef __sun 
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")) ;
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
#endif
    QPrinter*  m_qPrinter=NULL;
if( !m_qPrinter ){
        m_qPrinter = new QPrinter(QPrinter::HighResolution);
        if( !m_qPrinter )
           
        {
            printf("debug new QPrinter fail\n");
            return 1;
        }
    }
   
    QPainter p;
    if( !p.begin( m_qPrinter ) )
    {
        printf("debug p.begin fail\n");
        return 1;
    }

    QMainWindow mainw;

    QPaintDeviceMetrics metrics( p.device() );
    int dpiy = metrics.logicalDpiY();
    int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins

/*------------------------*/   
    QString textStr=QString("中文打印测试 123 abc");
    QRect body( margin, margin, metrics.width() - 2*margin, metrics.height() - 2*margin );
   
    QSimpleRichText richText( QStyleSheet::convertFromPlainText(QString::fromLocal8Bit(textStr)),
                 QFont(),
                 QString::fromLocal8Bit("datatable"),
                 QStyleSheet::defaultSheet(),
                 QMimeSourceFactory::defaultFactory(),
                 body.height() );
    richText.setWidth( &p, body.width() );
      QRect view( body );
    qDebug(textStr);
    int page = 1;
    do {
       richText.draw( &p, body.left(), body.top(), view, mainw.colorGroup() );
       view.moveBy( 0, body.height() );
       p.translate( 0 , -body.height() );
       p.drawText( view.right() - p.fontMetrics().width( QString::number( page ) ),
            view.bottom() + p.fontMetrics().ascent() + 5, QString::number( page ) );
       if ( view.top()  >= richText.height() )
        break;

       m_qPrinter->newPage();
       page++;
    } while (TRUE);
    return 1;
}
菜鸟也是鸟
离线xinqingfly

只看该作者 1楼 发表于: 2008-05-30
没人探讨探讨吗
菜鸟也是鸟
离线xinqingfly

只看该作者 2楼 发表于: 2008-06-02
继续顶
菜鸟也是鸟
离线widesea8111

只看该作者 3楼 发表于: 2008-11-25
编译QT 添加freeType 支持
快速回复
限100 字节
 
上一个 下一个