3

问题:

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

在某些情况下,要打印的页面序列可以是不同大小的。

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

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

在物理打印机上,如果我尝试更改页面大小,它要么不起作用,要么使打印机处于错误状态。

因此,似乎没有太多选择,只能让每个页面成为单独的工作。次要缺点 - 可能在网络上。那好吧。

但是,在 pdf 或任何类型的文件打印中,序列是否包含在多页的单个文档中,或者是否创建数百个不同的文档,每个文档都有一个页面,这会产生巨大的差异。

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

唯一的问题:

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

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

由于 Adob​​e 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,我只是不知道该寻找什么。

4

1 回答 1

3

使用公共功能

QPrinter::outputFormat()

它返回一个枚举类型 enum QPrinter::OutputFormat

并检查是否是QPrinter::PdfFormat

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

于 2018-03-14T17:47:13.930 回答