QPainter打印札记

发布时间:2023年12月26日

目的

主要是记录一下利用Qt 结合打印机(zebra, deli)打印相关条码或者label marker打印以及遇到问题。

  • 使用qt 打印模块需要注意事项
  • 如何处理打印机分辨率与自身打印内容分辨率转化处理
  • 在排除打印机没问题后,如何避免打印出来内容有黑色印记, 不清晰。

使用QPrinter

printesupport

项目pro ,pri文件中添加printsupport 模块支持

Qt += printsupport

QPrinter

此设备表示一系列打印输出页面,且使用方式几乎准确如同其它描绘设备,譬如 QWidget and QPixmap 。提供了一组额外函数来管理特定设备特征,譬如:取向和分辨率,及在生成文档时遍历文档页面。

在 Windows 或 macOS 上直接打印到打印机时, QPrinter 使用内置的打印机驱动程序。在 X11 上, QPrinter 使用 CUPS (公共 Unix 打印系统) 将 PDF 输出发送到打印机。或者,printProgram () 函数可用于指定要使用的命令或实用程序,而不是系统默认值。

请注意,在无效打印机上设置纸张大小和分辨率等参数是未定义的。在更改任何参数之前,您可以使用 QPrinter::isValid () 来验证这一点。

QPrinter 支持许多参数,其中大部分参数可以由最终用户通过打印对话框 进行更改。通常,QPrinter 将这些函数传递给底层 QPrintEngine 。

  • setOrientation() 告诉 QPrinter 使用哪个页面方向。
  • setPaperSize() 告诉 QPrinter 打印机的纸张尺寸。
  • setResolution () 告诉 QPrinter 您希望打印机提供什么分辨率,以每英寸点数 (DPI) 为单位。
  • setFullPage () 告诉 QPrinter 是要处理整页还是只处理打印机可以绘制的部分。
  • setCopyCount () 告诉 QPrinter 它应该打印多少份文档。

其中许多函数只能在实际打印开始之前(即在调用 QPainter::begin () 之前)调用。这通常是有道理的,因为例如,在打印进行到一半时,无法更改份数。还有一些设置是用户设置的(通过打印机对话框),应用程序应遵守这些设置。有关详细信息,请参见 QAbstractPrintDialog 的文档。

QPainter::begin () 被调用时,它所操作的 QPrinter 会为新页面做好准备,从而能够立即使用 QPainter 来绘制文档中的第一页。 绘制完第一页后,可以调用 newPage () 来请求新的空白页进行绘制,或者可以调用 QPainter::end () 来完成打印。第二页和所有后续页面都是在绘制之前使用对 newPage () 的调用来准备的。

文档中的第一页不需要在前面调用 **newPage ()。**如果您需要在打印文档的开头插入空白页,则只需在 QPainter::begin () 之后调用 newPage ()。同样,在绘制文档的最后一页后调用 newPage () 将导致在打印文档的末尾附加一个尾随空白页。

如果要中止打印作业, abort () 将尽力停止打印。它可能会取消整个作业或仅取消其中的一部分。

由于 QPrinter 可以打印到任何 QPrintEngine 子类, 可以通过子类化 QPrintEngine 并重新实现其接口来扩展打印支持以涵盖新型打印子系统.

彩色打印

QPrinter::ColorMode

常量 描述
QPrinter::Color 1 如果可用,则以彩色打印,否则以灰度打印。
QPrinter::GrayScale 0 以灰度打印,即使在彩色打印机上也是如此。

单面打印或双面打印

QPrinter:: DuplexMode

常量 描述
QPrinter::DuplexNone 0 仅限单面(单面)打印。
QPrinter::DuplexAuto 1 打印机的默认设置用于确定是否使用双面打印。
QPrinter::DuplexLongSide 2 每张纸的两面都用于打印。在打印第二面之前,将纸张翻转到其最长的边缘
QPrinter::DuplexShortSide 3 每张纸的两面都用于打印。在打印第二面之前,将纸张翻转到其最短的边缘

打印方向

QPrinter:: Orientation
此枚举类型用于指定每个页面的方向

常量 描述
QPrinter::Portrait 0 页面的高度大于其宽度。
QPrinter::Landscape 1 页面的宽度大于其高度。

此类型与 QPrinter::PaperSize()QPrinter::setFullPage () 交互,以确定应用程序可用的页面的最终大小。

打印格式

QPrinter::OutputFormat
OutputFormat 枚举用于描述 QPrinter 应用于打印的格式。

常量 描述
QPrinter::NativeFormat 0 QPrinter 将使用运行它的平台定义的方法打印输出。此模式是直接打印到打印机时的默认模式。
QPrinter::PdfFormat 1 QPrinter 会将其输出生成为可搜索的 PDF 文件。此模式是打印到文件时的默认模式。

打印顺序

QPrinter:: PageOrder
QPrinter 使用此枚举类型来告诉应用程序如何打印。

常量 描述
QPrinter::FirstPageFirst 0 应首先打印编号最低的页面。
QPrinter::LastPageFirst 1 应首先打印编号最高的页面。

纸张大小

QPrinter:: PaperSize

枚举 QPagedPaintDevice::PageSizetypdef

此枚举类型指定 QPrinter 应使用的纸张大小。 QPrinter 不会检查纸张尺寸是否可用;它只是使用此信息以及 QPrinter::OrientationQPrinter::setFullPage () 来确定可打印区域。

定义的大小(使用 setFullPage (true)) 可在 QPagedPaintDevice 中找到。

采用 setFullPage (false) (默认),指标会小一点;多少取决于使用的打印机。

由于历史原因,QPageSize:: Executive 与标准 PostscriptWindows Executive 大小不同,请使用 QPageSize::ExecutiveStandard 代替。

Postscript 标准大小 QPageSize::FolioWindows DMPAPER_FOLIO大小不同,如果需要,请使用 Postscript 标准大小 QPageSize::FanFoldGermanLegal

这个 typedef 是在 Qt 4.4 中引入的。

纸张source

QPrinter:: PaperSource
此枚举类型指定 QPrinter 要使用的纸张源。 QPrinter 不检查纸张来源是否可用;它只是使用此信息来尝试设置纸张来源。是否设置纸张来源取决于打印机是否具有该特定来源。
警告: 这目前仅适用于 Windows。

常量 描述
QPrinter::Auto 6
QPrinter::Cassette 11
QPrinter::Envelope 4
QPrinter::EnvelopeManual 5
QPrinter::FormSource 12
QPrinter::LargeCapacity 10
QPrinter::LargeFormat 9
QPrinter::Lower 1
QPrinter::MaxPageSource 13 已弃
文章来源:https://blog.csdn.net/liunanya/article/details/135193778
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。