Linux中的QPrinter解析错误

时间:2014-10-10 20:41:32

标签: c++ linux qt printing resolution

我想让一些图像打印程序在Qt中工作。尝试打印到具有ppd的自定义打印机。有基于设备信息的计算,用于创建要发送到打印机的图像。

查看打印机属性时,我发现Resolution300 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

2 个答案:

答案 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。