Setting Chromaticity.MONOCHROME print request attribute on macOS

Alexander Scherbatiy alexander.scherbatiy at bell-sw.com
Mon Aug 28 15:00:02 UTC 2023


Hello,

I am working on issue "8315113 Print request Chromaticity.MONOCHROME 
attribute does not work on macOS" [1].

There is PMSetColorMode function in the Apple Developer documentation 
[2] but it is marked as deprecated
   "There is no replacement; this function was included to facilitate 
porting legacy applications to macOS, but it serves no useful purpose."
and really does nothing.


Using native print dialog and selecting Black & White box allows to 
print black and white pages on macOS.
I dumped NSPrintInfo print settings dictionary for two printers when the 
Black & White box is selected and the logs contain
ColorModel key, Gray value for HP ColorLaserJet MFP M178-M181-AirPrint 
printer and
HPColorMode key, grayscale value for HP Ink Tank 115.
It looks like each printer can have each own key/value for Black & White 
settings.

I tried to print key/values for all presets available for NSPrintInfo 
without using the native print dialog:
----------
     PMPrinter pr;
     PMPrintSession printSession = (PMPrintSession)[printInfo 
PMPrintSession];
     OSStatus status = PMSessionGetCurrentPrinter(printSession, &pr);
     CFArrayRef presetsList = nil;
     status = PMPrinterCopyPresets(pr, &presetsList);
     CFIndex arrayCount = CFArrayGetCount(presetsList);

     for (CFIndex index = 0; index < arrayCount; index++) {
         PMPreset preset = (PMPreset)CFArrayGetValueAtIndex(presetsList, 
index);
         CFStringRef presetName = nil;
         if (PMPresetCopyName(preset, &presetName) == noErr && 
CFStringGetLength(presetName) > 0) {
             NSLog(@"  presetName: '%@'", presetName);
             NSDictionary* dict = nil;
             if (PMPresetGetAttributes(preset, 
(CFDictionaryRef*)(&dict)) == noErr) {
                    // print preset dict

----------
The printers which I tested do contain "Black and White" preset but they 
do not include key/values related to black and white printing.


What is the right way to use different key/values (ColorModel: Gray, 
HPColorMode: grayscale, ...) in code to set Black & White settings for 
NSPrintInfo?
Could it be a configuration file which contains all color model 
key/values for all known printers?

Thanks,
Alexander.

[1] https://bugs.openjdk.org/browse/JDK-8315113

[2] 
https://developer.apple.com/documentation/applicationservices/core_printing/1805783-pmsetcolormode




More information about the client-libs-dev mailing list