我想让一些图像打印程序在Qt中工作。尝试打印到具有ppd的自定义打印机。有基于设备信息的计算,用于创建要发送到打印机的图像。
查看打印机属性时,我发现Resolution
为300 dpi x 300 dpi
。
在Windows中,一切正常 - 但在Linux中,计算出的图像信息变得非常大,使我的文件爆炸......查看我在Linux中发现的所有数据physicalDpiX
和{{1} (用于代码计算)是1200而不是300。
所以我把它归咎于QPrinter :: PrinterMode
QPrinter :: HighResolution 2在Windows上,将打印机分辨率设置为 为正在使用的打印机定义的。对于PostScript打印,设置 PostScript驱动程序的分辨率为1200 dpi。
我改变了我的构造函数来处理它 - 以防万一错误...它不起作用:
physicalDpiY
在Linux中解析数字是错误的,但在Windows中是正确的
尝试
这 - > setResolution(300);
它使this.resolution()变为300,但physicalDpiX和Y仍显示1200。
QPrinter::supportedResolutions ()似乎说这个案子毫无希望......
如何让打印机看到打印机属性中显示的分辨率?
唯一希望从杯子中提取一些方法吗?我试过......我不明白如何使用我发现的唯一信息:cups Resolution
答案 0 :(得分:3)
首先,永远不要依赖物理设备解析。用户可以使用具有不同分辨率的打印机,使用一种分辨率(300dpi)打印一次,使用其他分辨率(600dpi)打印一次,或者可以打印到PDF文件,或打开使用屏幕分辨率的打印预览窗口。其次,使用ScreenResolution仅用于打印到屏幕,对于任何高分辨率设备来说它太粗糙了。字母和图像会很难看,页面上的定位精度太低。
也可以通过QPainter缩放来实现独立于物理设备分辨率和操作系统的打印。据我所知,QPainter基本分辨率为1200dpi。这意味着这是Qt可以打印的最好的有效分辨率。下一个示例显示了在绘制页面上的任何内容之前如何设置缩放。
QPrinter printer(QPrinter::HighResolution);
qreal resolutionFactor = 1200 / printer->resolution();
QPainter painter;
painter.begin(&printer);
painter.scale(1 / resolutionFactor, 1 / resolutionFactor);
printPage(&painter); // This method should implement printing itself
painter.end();
然后实现内容绘制(设置x和y坐标,图像的宽度和高度等),使基本QPainter分辨率达到1200dpi,渲染过程将注意所有尺寸将自动缩放到目标设备的分辨率。 / p>
答案 1 :(得分:0)
我希望对这个问题有一个通用的答案,现在我解决了用户期望使用的特定驱动程序的问题,同时保留了其他类似pdf或hp打印的默认值(1200)。
我的自定义打印机包含杯子选项,分辨率选项看起来像
name="printer-resolution" value="300x300dpi"
我可以从中提取分辨率。如果那个特定的杯子选项不存在,那么我可以使用默认的1200。