Печать с помощью системного диалога при использовании PMPrintSession - PullRequest
0 голосов
/ 15 февраля 2019

Ниже приведен код, который мы используем для печати на Mac.Есть ли простой способ разрешить печать с помощью системного диалога?Похоже, когда-то PMSessionBeginDocument & PMSessionBeginPage были чем-то, но теперь все, что я могу найти, - это параметры NoDialog.

Эти звонки по-прежнему можно использовать с новейшими платформами?Или есть другой способ печати с помощью системного диалога?

PMPrintSession lPrintSession;
PMCreateSession(&lPrintSession);

PMPrintSettings lPrintSettings;
PMCreatePrintSettings(&lPrintSettings);


PMSessionDefaultPrintSettings(lPrintSession, lPrintSettings);

...    

PMSessionSetCurrentPMPrinter(lPrintSession, lPrinter);

...

PMSetPageRange(lPrintSettings, 1, 1);
PMSetCopies(lPrintSettings, inCopies, false);

if (!inUseSystemDialog) {

    PMSessionBeginCGDocumentNoDialog(lPrintSession, lPrintSettings, lPageFormat);
    PMSessionBeginPageNoDialog(lPrintSession, lPageFormat, NULL);

} else {

    // TODO: What do we do here? Are these calls usable?
    // PMSessionBeginDocument(lPrintSession, lPrintSettings, lPageFormat);
    // PMSessionBeginPage(lPrintSession, lPageFormat, NULL);

}

CGContextRef lGraphics;
PMSessionGetCGGraphicsContext(lPrintSession, &lGraphics);

...

PMSessionEndPageNoDialog(lPrintSession);
PMSessionEndDocumentNoDialog(lPrintSession);

1 Ответ

0 голосов
/ 16 февраля 2019

Вы можете запустить NSPrintPanel, чтобы отобразить системный диалог печати.Для этого вам также необходимо настроить объект NSPrintInfo:

NSPrintInfo* printInfo = [NSPrintInfo new];
// set printInfo.printer if you want to override the default

PMPrintSettings printSettings = printInfo.PMPrintSettings;
// configure printSettings
[printInfo updateFromPMPrintSettings];

PMPageFormat pageFormat = printInfo.PMPageFormat;
// configure pageFormat
[printInfo updateFromPMPageFormat];

Создать панель и запустить ее с этим информационным объектом:

NSPrintPanel* panel = [NSPrintPanel printPanel];
// configure panel; for example, set its options property
NSInteger result = [panel runModalWithPrintInfo:printInfo];

Использовать информацию в качестве основывашей сессии печати:

if (result == NSOKButton)
{
    PMPrintSession session = printInfo.PMPrintSession;
    printSettings = printInfo.PMPrintSettings;
    pageFormat = printInfo.PMPageFormat;
    PMSessionBeginCGDocumentNoDialog(session, printSettings, pageFormat);
    PMSessionBeginPageNoDialog(session, pageFormat, NULL);
    CGContextRef lGraphics;
    PMSessionGetCGGraphicsContext(session, &lGraphics);

    ...

    PMSessionEndPageNoDialog(session);
    PMSessionEndDocumentNoDialog(session);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...