打印不同尺寸的页面 - 确定打印机是否为pdf

时间:2018-03-14 17:03:38

标签: qt qprinter

问题:

我的项目......打印一系列页面......基于某些模板和数据库信息创建...

在某些情况下,要打印的页面顺序可能不同。

我一直在尝试打印到真正的打印机,生成多个页面

if (m_printer->newPage()) { ... }

在物理打印机上,如果我尝试更改页面大小,它可能无法正常工作或使打印机处于错误状态。

所以似乎没有多少选择,只是让每一页都成为一个单独的工作。轻微的缺点 - 可能在网络上。哦,好吧。

在pdf或任何类型的文件打印中,它会产生巨大的差异,无论序列是包含在多个页面上的单个文档中,还是它创建了数百个不同的文档,每个页面都有。

所以,我发现了Is it possible to make a pdf with different page size in Qt? 它似乎正是我需要的,如果我打印到pdf - 而对于真正的打印机,我将使每个页面成为一个单独的工作。

唯一的问题:

如何判断我是创建PDF文件,还是将作业发送到真正的打印机?

我查看了QPrinter和QPrinterInfo,我没有看到任何可以提供帮助的内容。

由于Adobe Acrobat,可能启用了Pdf打印。

我目前正在Windows中实现此功能。

编辑:为什么获取outputFormat(Naidu的答案如下)不起作用:

qprinter.cpp:
void QPrinterPrivate::initEngines(QPrinter::OutputFormat format, const QPrinterInfo &printer)
{
    ..
    // Only set NativeFormat if we have a valid plugin and printer to use
    if (format == QPrinter::NativeFormat) {    //////// which of course has to be, we have to support any printer
        ps = QPlatformPrinterSupportPlugin::get();
        QPrinterInfo printerToUse = findValidPrinter(printer);
        if (ps && !printerToUse.isNull()) {    //////// both valid since the PDF writer is valid
            outputFormat = QPrinter::NativeFormat;
            printerName = printerToUse.printerName();
        }
    }
    ...
}

我想要检查一下,除了" pdf"可能包含在名称中。如果需要,我愿意使用糟糕的DEVMODE,我只是不知道该找什么。

1 个答案:

答案 0 :(得分:3)

使用公共功能

QPrinter::outputFormat()

返回枚举类型枚举QPrinter::OutputFormat

并检查它是否为QPrinter::PdfFormat

http://doc.qt.io/qt-5/qprinter.html#OutputFormat-enum