由于需要做一个不干胶标签纸的打印程序,所以用到了PrintSupport。在这里简单记录下,以备自己查看。
一开始只是实现了标签打印功能,后来发现每次修改了标签都要打印出来看效果(节约一些标签纸,因为是特殊印刷的标签纸,数量有限),想到了用PrintSupport中的QPrintPreviewWidget或者QPrintPreviewDialog来实现预览。
不干胶标签的实际尺寸为100x80mm,不干胶标签的载体为103mm宽的纸带,标签在载体上的位置约为向右2mm,向下1mm。于是paper定为(paperWidth,paperHeight) = (103,83),page定为(pageWidth,pageHeight) = (100,80)。leftMarginMM = 2, topMarginMM = 1, rightMarginMM = 1, bottomMarginMM = 2。
printer = new QPrinter();
printer->setPrinterName("ZDesigner ZT510-300dpi ZPL");
printer->setOrientation(QPrinter::Portrait);//设置页面方向 纵向
printer->setPaperSize(QPrinter::Custom);
/*
* 根据文档中的描述,这里不应该注释掉,
* 另外需要printer->setPageSizeMM(QSizeF(pageWidth, pageHeight));。
* 但是这样的实际效果是不正确的,我觉得文档可能有些问题。改成现在这样实际效果是正确的。
* */
//printer->setPaperSize(QSizeF(paperWidthMM, paperHeightMM), QPrinter::Millimeter);
printer->setPageSizeMM(QSizeF(paperWidthMM, paperHeightMM));
printer->setPageMargins(leftMarginMM, topMarginMM, rightMarginMM, bottomMarginMM, QPrinter::Millimeter);
if (preview != Q_NULLPTR)
delete preview;
preview = new QPrintPreviewWidget(printer, this);
ui->horizontalLayout->addWidget(preview);
connect(preview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(on_previewPressed(QPrinter*)));
preview->updatePreview();下面是预览的实现:
void WndPreview::on_previewPressed(QPrinter *printer)
{
QPainter painter;
painter.begin(printer);
QRectF pageRect = printer->pageRect(QPrinter::Millimeter);
int widthPixle = int(printer->resolution() * (pageRect.width() / 25.4));
int heightPixle = int(printer->resolution() * (pageRect.height() / 25.4));
painter.setViewport(0,0,widthPixle,heightPixle);
QPen penGreen(QColor(0,255,0));
painter.setPen(penGreen);
painter.drawRoundedRect(0,0,widthPixle,heightPixle,30,30);
QPen penBlack(QColor(0,0,0));
painter.setPen(penBlack);
QFont font;
font.setFamily("Bahnschrift");
font.setPixelSize(16);
painter.setFont(font);
painter.drawText(QPoint(0,50), "Sample");
font.setPointSize(16);
painter.setFont(font);
painter.drawText(QPoint(0,100), "Sample");
painter.end();
}
绿色的线表示不干胶标签。
版权声明:本文为qq_34400085原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。