在 Mac 上检测 PDF 打印
Detecting PDF Printing on Mac
我使用 QPrintDialog 初始化一个 QPrinter 对象,如下所示:
QPrinter printer;
QPrintDialog dlg(&printer);
if (dlg.exec() == QDialog::Accepted)
{
/* Are we printing to PDF? */
}
在 Windows 上,很容易检测输出是发送到文件还是 PDF 编写器。 在 Mac 上,没有相同的功能工作:
if ((printer.outputFormat() == QPrinter::PdfFormat)
|| (!printer.outputFileName().isEmpty()))
{
qDebug("PDF mode");
}
在线查看qprintdialog_mac.mm的副本,在函数QPrintDialogPrivate::closeCarbonPrintPanel()中,Qt尝试检测输出是否被重定向到文件。 它将文件名存储在QMacPrintEnginePrivate的成员中。 不知何故,该名称永远不会出现在 QPrinter 对象中。 我不确定断开连接在哪里。
所以。。。。。如何判断打印输出是否实际发送到文件? 如果很容易,我愿意在这里获得特定于平台的信息。 不过,我的Mac编程经验为零。
这是
Qt中的一个错误。
在Qt 5.3中,提供的示例代码将起作用,因为第二个条件,即调用QPrinter::outputFileName()
。
从Qt 5.14开始,QPrinter的outputFileName属性仍然为空,即使在QPrintDialog中选择了"另存为PDF"。
但是,当绘制到QPrinter对象时,正确的事情就完成了。
- 如果选择了"使用预览打开",则绘制的内容将打开预览版。
- 如果选择"另存为PDF",将弹出一个文件对话框
- 如果选择了"在邮件中发送",邮件客户端将打开 PDF附
- 等。
知何故,QPrinter 似乎以一种不透明的方式存储对话中的所有信息,无法通过公共获取者访问。
支持mac打印对话框中所有选项的正确方法似乎是:
QPrinter printer;
QPrintDialog dlg(&printer);
if (dlg.exec() == QDialog::Accepted)
{
QPainter painter;
painter.begin(&printer);
// do the painting
painter.end();
}
遗憾的是,如果您想实现自己的打印逻辑,似乎无法从 QPrinter 对象中提取信息。
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 如何使用打印到 PDF 打印机在 MFC 和 CView 中以编程方式打印而不提示输入文件名?
- 将 QTableWidget 内容打印为 PDF
- 从QT打印PDF文件
- 如何使用QPainter将多个Qwidgets在不同页面中打印到PDF
- 如何判断Microsoft打印到 PDF 打印机驱动程序何时完成
- 使用 QT 打印为 pdf
- 使用 Qt 打印 PDF 文件
- cmd.exe打开PDF并打印它
- 使用libharu在pdf中打印日语字符
- 在 Mac 上检测 PDF 打印
- Libharu pdf创建:如何知道打印文本的大小
- 使用MFC打印PDF文件
- 如何在Qt中打印pdf文件
- 使用 C++ 在打印机上可视化打印 PDF 文件
- 使用Boost.regex从目录中打印.pdf文件名