Git   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Qt:打印原始文本大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我需要在Qt应用程序中将ZPL脚本输出到Zebra打印机。 打印机位于客户端计算机中configuration为原始打印机的smb共享networking上。

如果我从C ++tesTing程序中调用cupsPrintFile( "printer_name","./tmp_print_file.zpl","",NULL ) ,一切正常。

如果我使用QTextDocument::print()作为文档“./tmp_print_file.zpl”中的相同文本,则不会打印任何内容。 我嗅探networking,发现发送到打印机服务器的数据不是原始数据,而是一个后记!

有没有办法让数据发送到打印机,根本没有任何@L_607_5@?

打印到本地共享打印机networkingclosures时

batch file在不信任的情况下跨域添加打印机

是否可以使用batch file将文件发送到打印机?

如何将原始打印机代码写入从ruby的Windows打印机共享?

从C#中的Windows服务打印HTML文档,无需打印对话框

让我清楚,我不想渲染一个文本,而是直接发送标签脚本,准备打印,直接打印机,了解ZPL协议。

感谢所有。

编辑:

正如@马丁所说,我试过了

printer.setOutputFormat( QPrinter::NativeFormat ); QTextDocument *doc = new QTextDocument( QString( label ),this ); doc->print( &printer );

但它没有工作。

从网站打印到远程打印机

Windows,阻止打印过程

打印时获取文件名称

Ubuntu 14.x / LibreOffice 4.2 – 如何打印到PS文件(不是PDF)

安装Windows打印机驱动程序时出错

你能不能刚刚做你在测试程序中做的事情:

创建一个临时文件( QTemporaryFile )。

内容发送到文件

打电话给cupsPrintFile方法

或者,CUPS API可能会绕过临时文件。 免责声明:我对CUPS API绝对没有经验; 这只是粗略的看一些在线文档。 看起来可能是以下顺序:

cupsCreateJob> cupsStartDocument> cupsWriterequestData> cupsFinishDocument

如果这样的话,你只需要将你的QString转换成正确的字节编码。

在我开始之前,一定要感谢戴夫。 他建议在使用银联打印时绕过临时文件工作正常。

现在,我的结论是:使用Qt打印原始数据并不容易。 也许创建自定义的QPainter或者下载QPrinter可能会给出一个解决方案,但这需要我太多的时间。

最终的解决方案是在我的Qt应用程序中使用CUPs API。 不幸的是,这不是便携式的。

这是一个片段:

#include <cups/cups.h> //... int print_label( const char *text,const char *printer_name,const char *job_name ) { int jobId = 0; jobId = cupsCreateJob( CUPS_http_DEFAULT,printer_name,job_name,NULL ); if ( jobId > 0 ) { qDebug( ) << "PrinTing job #" << jobId << " ("" << job_name << "")."; const char* format = CUPS_FORMAT_TEXT; // CUPS_FORMAT_POSTSCRIPT; cupsStartDocument( CUPS_http_DEFAULT,jobId,text,format,true ); cupsWriterequestData( CUPS_http_DEFAULT,strlen( text ) ); cupsFinishDocument( CUPS_http_DEFAULT,printer_name ); } return jobId; } //... // Now,inside any Qt function (may be a slot): QPrinter printer; QPrintDialog *dialog = new QPrintDialog( &printer,this ); dialog->setWindowtitle( tr( "Zebra label" ) ); if ( dialog->exec( ) != QDialog::Accepted ) return; // This is the sample label. Can be anything. const char label[] = "^XA~TA000~JSN^LT0^MNW^MTD^PON^PMN^LH0,0^JMA^PR4,4^MD0^JUS^LRN^CI0^XZn" "^XAn" "^MMTn" "^LL0600n" "^PW900n" "^LS0n" "^BY2,3,54^FT24,109^BCN,Y,Nn" "^FD>;43210000>773>0000^FSn" "^PQ1,1,Y^XZn"; // Informative only. ui->txtLabelScript->setPlaintext( label ); // Call the prinTing function. if ( print_label( label,printer.printerName( ).toAscii( ),"Zebra_Label" ) == 0 ) qDebug( ) << "CUPS Error: " << ippErrorString( cupsLastError( ) );

它完成了。

不要忘记链接libcups( -lcups )。

我仍然希望任何好友添加一个解决方案,推荐只Qt是可能的。 同时,这是足够的。

谢谢大家。

感谢fljx的代码,这对我非常有用。

我改变了发送原始文本斑马打印机的litte。

const char * format = CUPS_FORMAT_RAW ;

看看QPrinter() ,

QTextDocument旨在呈现格式化文本。

大佬总结

以上是大佬教程为你收集整理的Qt:打印原始文本全部内容,希望文章能够帮你解决Qt:打印原始文本所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: