- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试让一些图像打印程序在 Qt 中运行。尝试打印到具有 ppd 的自定义打印机。根据设备信息进行计算,以创建要发送到打印机的图像。
查看打印机属性时,我看到分辨率
是300 dpi x 300 dpi
。
在 windows 中,一切正常 - 但在 Linux 中,计算的图像信息变得非常大,使我的文件爆炸......查看所有数据我发现在 Linux 中,physicalDpiX
和 physicalDpiY
(用于代码计算)是1200而不是300。
所以我把它归咎于 QPrinter::PrinterMode
QPrinter::HighResolution 2 On Windows, sets the printer resolution to that defined for the printer in use. For PostScript printing, sets the resolution of the PostScript driver to 1200 dpi.
我更改了我的构造函数来处理它 - 以防默认值错误......它没有工作:
Printer::Printer(const QPrinterInfo& printerInfo, MainWindow* pWnd) :
#if defined(Q_OS_WIN32) || defined (Q_MAC_OSX)
QPrinter(QPrinter::HighResolution)
#else
QPrinter(QPrinter::ScreenResolution)
#endif
{
qDebug()<<"printer resolution physicalDpiX="<< this->physicalDpiX()<<", physicalDpiY="<<this->physicalDpiY();
// prints 1200 for each in Linux, 300 in windows
qDebug()<<"printer resolution="<< this->resolution();
// prints 96 in Linux, 300 in windows
// printer properties (like from system-config-printer) show 300
// printerInfo.printerName() and printerInfo.defaultPrinter().printerName() show my printer
}
这些数字在 Linux 中的分辨率是错误的,但在 Windows 中是正确的
尝试过
这->setResolution(300);
它使 this.resolution() 变为 300,但 physicalDpiX 和 Y 仍然显示 1200。
QPrinter::supportedResolutions ()好像说这个案子没救了……
如何让我的打印机看到打印机属性中显示的分辨率?
从 cups 中提取一些方法是唯一的希望吗?我试过了...我不明白如何使用我找到的唯一一条信息:cups Resolution
最佳答案
首先,永远不要依赖物理设备分辨率。用户可以使用不同分辨率的打印机,以一种分辨率(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();
然后为 1200dpi 的基本 QPainter 分辨率实现内容绘制(设置 x 和 y 坐标、图像的宽度和高度等),渲染过程将注意所有尺寸将自动缩放到目标设备的分辨率。
关于c++ - QPrinter 分辨率在 Linux 中是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26307733/
我使用以下代码设置我的 QPrinter 对象的纸张大小: printer_.setPaperSize(QPrinter::A4); 在我的电脑上,它按预期工作,但在另一台电脑上,我的 PDF 报告布
我是 Qt 的新手。下载了 SourceForge 的 Qt 应用程序的源代码,并尝试构建和运行它。通过添加 QT += 解决了一些类似的问题后.pro 文件的声明,我被困在这个: 在尝试在 Qt C
当使用 QTextDocument 和 QPrinter 打印为 PDF 时,是否有任何方法可以检测错误(例如,无法写入 PDF 文件)?我正在使用以下代码: QTextDocument docume
我正在尝试在 iOS 中使用 QT。 #include QPrinter print; 上面的代码给出了“变量的类型不完整‘QPrinter’”错误。尽管 QtGui/qprinter.h 对 QP
我需要在我的程序中打印标签。标签有一张图片和一个应该环绕在图片周围的描述文本。 QPrinter 只提供在矩形中打印文本,但没有我可以定义文本区域或类似内容的地方。 有什么办法还是必须自己写? 最佳答
当我尝试在我的代码中的任何位置声明 QPrinter 时,出现以下错误: Error 1 error LNK2019: unresolved external symbol "__declsp
我正在使用 Qt C++ 进行打印。但是我发现了一个问题,margin 没有按预期工作。这里是我使用的 QPrinter 配置。 QPrinter *pr = new QPrinter(QPrinte
在 Qt Desktop 应用程序中,如何在应用程序运行之间保持 QPrinter 选择? 考虑以下代码: printDialog = new QPrintDialog(); if (printDia
我正在尝试创建一个 Windows 应用程序(但最终也会将它移植到 linux,因此如果可能的话,交叉兼容性很重要)它将从网络摄像头拍摄照片并且可以在不使用 printDialog 框的情况下进行打印
我需要为用户动态创建的一些对象生成一个文档来打印,我想打印这些文档。我编写了以下代码(generateDocument() 引用文档以添加 html 代码): QPrinter printer; QP
我在我的项目中实现了打印报告的功能。报告以 HTML 内容的形式呈现。我用于打印 QWebEnginePage。我需要报告的高分辨率打印输出: QPrinter printer = new QPrin
我想使用 PyQt 通过打印机预览然后打印报告。我尝试了以下代码: printer = QtGui.QPrinter() doc = QtGui.QTextDocument("testing") d
我正在尝试让一些图像打印程序在 Qt 中运行。尝试打印到具有 ppd 的自定义打印机。根据设备信息进行计算,以创建要发送到打印机的图像。 查看打印机属性时,我看到分辨率是300 dpi x 300 d
在我的小应用程序中,我想在每个页面中预览一些 HTML 内容,所以我使用了以下代码 /* * Handle events when clicking button to preview content
在我的小应用程序中,我想在每个页面中预览一些 HTML 内容,所以我使用了以下代码 /* * Handle events when clicking button to preview content
所以我一直在尝试让我的程序与 QPrinter 一起使用 cmake+mingw+qt5.2 进行编译,但我遇到了问题:以下测试程序无法编译,因为它找不到应该是一部分的 QPrinter QtCore
我想创建一个具有正确样式的 HTML 的 PDF 文档。这就是我正在尝试的: QTextDocument *doc = new QTextDocument(); const char* s1 = "b
有没有一种简单的方法可以使用 c++、qt 和 qprinter 类将工作/可点击的 url 添加到 pdf 中?稍微澄清一下:我想在生成新文档时添加 url。我不是要编辑现有的 pdf。 最佳答案
当从 QPrintPreviewDialog 打印文档时,我不想在 Linux 下从调用的 QPrinter 设置对话框中的打印机列表中删除“写入 PDF”。可以吗? 我已经尝试用我自己的按钮和操作替
我对默认页边距有疑问。 我想将页边距全部设置为 0,我做到了。 但它始终具有大约 1 英寸的边距,我认为硬件或某些默认值会保留左侧和顶部边距。 所以我调用了函数 QPrinter.margins().
我是一名优秀的程序员,十分优秀!