2014-11-11 11 views
1

트랜잭션 후 영수증을 인쇄해야하는 Qt 데스크탑 프로그램을 작성 중입니다. 이를 위해 각 영수증 끝에 "잘린 종이"를 발행해야합니다. 다음 아스키 문자 (아스키 27 + 아스키 105)는 인쇄 텍스트의 끝에 종이를자를 필요가 있다는 것을 이해합니다.Qt QPrinter를 사용하여 절단 된 용지 커맨드를 보내는 방법

QPrinter를 사용하여 보내는 방법에 대한 문서를 찾을 수 없습니다. QPrinter & QPainter를 사용하여 인쇄를 구현합니다.

누구나이 방법을 사용해 본 적이 있다면 Qt에서 용지 절단 명령을 처리하는 방법에 대해 조언하십시오.

답변

0

이 질문에 대한 답변을 찾아서 게시하여 다른 사람들에게 유용 할 수 있습니다.

append (ascii character) 명령을 사용하여 프린터 명령을 프린터에 추가했습니다. 여기

내가 사용하는 샘플 코드입니다 :

QString printer_name = "PrinterOne"; 
qDebug() << "Test printing started..."; 

QByteArray print_content_ba("Test Print text "); 
print_content_ba.append("\n"); 

//add end of the receipt buffer & cut command 
print_content_ba.append(27); 
print_content_ba.append(105); 

HANDLE p_hPrinter; 
DOC_INFO_1 DocInfo; 
DWORD dwJob = 0L; 
DWORD dwBytesWritten = 0L; 
BOOL bStatus = FALSE; 

//code to convert QString to wchar_t 
wchar_t szPrinterName[255]; 
int length = printer_name.toWCharArray(szPrinterName); 
szPrinterName[length]=0; 

if (OpenPrinter(szPrinterName,&p_hPrinter,NULL)){ 
qDebug() << "Printer opening success " << QString::fromWCharArray(szPrinterName); 
DocInfo.pDocName = L"Loyalty Receipt"; 
DocInfo.pOutputFile = NULL; 
DocInfo.pDatatype = L"RAW"; 
dwJob = StartDocPrinter(p_hPrinter, 1, (LPBYTE)&DocInfo); 
if (dwJob > 0) { 
    qDebug() << "Job is set."; 
    bStatus = StartPagePrinter(p_hPrinter); 
    if (bStatus) { 
     qDebug() << "Writing text to printer" << print_content_ba ; 
     bStatus = WritePrinter(p_hPrinter,print_content_ba.data(),print_content_ba.length(),&dwBytesWritten); 
     if(bStatus > 0){ 
      qDebug() << "printer write success" << bStatus; 
     } 
     EndPagePrinter(p_hPrinter); 
    } else { 
     qDebug() << "could not start printer"; 
    } 
    EndDocPrinter(p_hPrinter); 
    qDebug() << "closing doc"; 
} else { 
    qDebug() << "Couldn't create job"; 
} 
ClosePrinter(p_hPrinter); 
qDebug() << "closing printer"; 
} 
else{ 
    qDebug() << "Printer opening Failed"; 
} 
0

나는이 질문에 대한 정확한 답을하지 않아도 입력해도, 내 영수증 프린터 실행했습니다. "cut"명령은 print 명령의 TmxPaperSource=DocFeedCut 인수에 의해 제공됩니다.

PDF를 만든 다음 프린터로 보냅니다. (정상적인 영수증을 정확하게 인쇄하지 않았습니다 ...).

void printSomething(QGraphicsScene* scene) 
{ 
    /* Make a PDF-Printer */ 
    QPrinter pdfPrinter(QPrinter::ScreenResolution); 
    pdfPrinter.setOutputFormat(QPrinter::PdfFormat); 
    pdfPrinter.setPaperSize(QSize(100, 80), QPrinter::Millimeter); 
    pdfPrinter.setPageMargins(QMarginsF(2, 0, 5.8, 0)); //dont set top and bottom margins 
    pdfPrinter.setColorMode(QPrinter::GrayScale); 
    pdfPrinter.setResolution(203); //dpi of my printer 
    pdfPrinter.setFullPage(true); 
    pdfPrinter.setOutputFileName("hello.pdf"); 

    /* Render the Scene using the PDF-Printer */ 
    QPainter pdfPainter; 
    pdfPainter.begin(&pdfPrinter); 
    scene->render(&pdfPainter); 
    pdfPainter.end(); 

    /* Print */ 
    system(std::string("lp -o PageSize=RP80x297 -o TmxPaperReduction=Bottom -o Resolution=203x203dpi -o TmxPaperSource=DocFeedCut -o TmxMaxBandWidth=640 -o TmxPrintingSpeed=auto hello.pdf").c_str()); 
}