Jump to content

Recommended Posts

Posted

Good Morning,

 

This is my attempt at my first script within Papercut! (Wish me Luck)

I am looking to convert all emails to black and white as default and ALSO if a job has any colour in, to pop up and prompt the user 'if they really need to print in colour?'

 

Below is my script, can you let me know where it could be going wrong?

[color=#AA7700][font=monospace]/*[/font][/color]
[color=#AA7700][font=monospace]* Request user for grayscale/color printing[/font][/color]
[color=#AA7700][font=monospace]*[/font][/color]
[color=#AA7700][font=monospace]*/[/font][/color]
[color=#770088][font=monospace]function [/font][/color][color=black][font=monospace]printJobHook[/font][/color][color=#666666][font=monospace]([/font][/color][color=#0000FF][font=monospace]inputs[/font][/color][color=#666666][font=monospace], [/font][/color][color=#0000FF][font=monospace]actions[/font][/color][color=#666666][font=monospace]) [/font][/color][color=#666666][font=monospace]{[/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#AA7700][font=monospace]/*[/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#AA7700][font=monospace]* This print hook will need access to all job details[/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#AA7700][font=monospace]* so return if full job analysis is not yet complete.[/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#AA7700][font=monospace]* The only job details that are available before analysis[/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#AA7700][font=monospace]* are metadata such as username, printer name, and date.[/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#AA7700][font=monospace]*[/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#AA7700][font=monospace]* See reference documentation for full explanation.[/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#AA7700][font=monospace]*/[/font][/color]
[color=#666666][font=monospace]  [/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#770088][font=monospace]var [/font][/color][color=#0000FF][font=monospace]CONVERT_MESSAGE [/font][/color][color=#666666][font=monospace]= [/font][/color][color=#AA2222][font=monospace]'Your job contains colour pages. Would you like to convert your job to grayscale? Selecting "No" will print the job in colour, Selecting "YES" will change the job to greyscale.'[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]  [/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#770088][font=monospace]var [/font][/color][color=#0000FF][font=monospace]EMAIL_APPLICATION_TITLES [/font][/color][color=#666666][font=monospace]= [/font][/color][color=#666666][font=monospace][ [/font][/color][color=#AA2222][font=monospace]'Microsoft Outlook'[/font][/color][color=#666666][font=monospace], [/font][/color][color=#AA2222][font=monospace]'Microsoft Office Outlook'[/font][/color][color=#666666][font=monospace], [/font][/color][color=#AA2222][font=monospace]'outbind://' [/font][/color][color=#666666][font=monospace]][/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]  [/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#770088][font=monospace]if [/font][/color][color=#666666][font=monospace]([/font][/color][color=black][font=monospace]matchesAny[/font][/color][color=#666666][font=monospace]([/font][/color][color=#004499][font=monospace]inputs[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]job[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]is[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]documentname[/font][/color][color=#666666][font=monospace], [/font][/color][color=#004499][font=monospace]EMAIL_APPLICATION_TITLES[/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace]) [/font][/color][color=#666666][font=monospace]{[/font][/color]
[color=#666666][font=monospace]    [/font][/color][color=#AA7700][font=monospace]// this job is an email, convert it to grayscale (no harm done if the job is[/font][/color]
[color=#666666][font=monospace]    [/font][/color][color=#AA7700][font=monospace]// already grayscale)[/font][/color]
[color=#666666][font=monospace]    [/font][/color][color=#004499][font=monospace]actions[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]job[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]convertToGrayscale[/font][/color][color=#666666][font=monospace]([/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]    [/font][/color]
[color=#666666][font=monospace]    [/font][/color][color=#770088][font=monospace]if [/font][/color][color=#666666][font=monospace]([/font][/color][color=#004499][font=monospace]inputs[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]job[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]isAnalysisComplete[/font][/color][color=#666666][font=monospace]) [/font][/color][color=#666666][font=monospace]{[/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#AA7700][font=monospace]// No job details yet so return.[/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#770088][font=monospace]return[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]    [/font][/color][color=#666666][font=monospace]}[/font][/color]
[color=#666666][font=monospace]    [/font][/color]
[color=#666666][font=monospace]    [/font][/color][color=#770088][font=monospace]if [/font][/color][color=#666666][font=monospace]([/font][/color][color=#004499][font=monospace]inputs[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]job[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]is[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]Color[/font][/color][color=#666666][font=monospace]) [/font][/color][color=#666666][font=monospace]{[/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#AA7700][font=monospace]/* Color job, ask the use if they want to print. [/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#AA7700][font=monospace]*/[/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#770088][font=monospace]else [/font][/color][color=#770088][font=monospace]if [/font][/color][color=#666666][font=monospace]([/font][/color][color=#004499][font=monospace]inputs[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]client[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]isRunning[/font][/color][color=#666666][font=monospace]) [/font][/color][color=#666666][font=monospace]{[/font][/color]
[color=#666666][font=monospace]        [/font][/color][color=#770088][font=monospace]var [/font][/color][color=#0000FF][font=monospace]response [/font][/color][color=#666666][font=monospace]= [/font][/color][color=#004499][font=monospace]actions[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]client[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]promptYesNo[/font][/color][color=#666666][font=monospace]([/font][/color][color=#004499][font=monospace]CONVERT_MESSAGE[/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace]; [/font][/color][color=#666666][font=monospace]}[/font][/color]
[color=#666666][font=monospace]            [/font][/color]
[color=#666666][font=monospace]            [/font][/color][color=#770088][font=monospace]if [/font][/color][color=#666666][font=monospace]([/font][/color][color=#004499][font=monospace]response [/font][/color][color=#666666][font=monospace]== [/font][/color][color=#AA2222][font=monospace]'NO'[/font][/color][color=#666666][font=monospace]) [/font][/color][color=#666666][font=monospace]{[/font][/color]
[color=#666666][font=monospace]            [/font][/color][color=#004499][font=monospace]actions[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]log[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]debug[/font][/color][color=#666666][font=monospace]([/font][/color][color=#AA2222][font=monospace]'User chose to keep on printing in colour'[/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#666666][font=monospace]} [/font][/color][color=#770088][font=monospace]else [/font][/color][color=#770088][font=monospace]if [/font][/color][color=#666666][font=monospace]([/font][/color][color=#004499][font=monospace]response [/font][/color][color=#666666][font=monospace]== [/font][/color][color=#AA2222][font=monospace]'TIMEOUT'[/font][/color][color=#666666][font=monospace]) [/font][/color][color=#666666][font=monospace]{[/font][/color]
[color=#666666][font=monospace]        [/font][/color][color=#004499][font=monospace]actions[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]log[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]debug[/font][/color][color=#666666][font=monospace]([/font][/color][color=#AA2222][font=monospace]'Dialog timed out, canceling job.'[/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]        [/font][/color][color=#004499][font=monospace]actions[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]job[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]cancel[/font][/color][color=#666666][font=monospace]([/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#666666][font=monospace]} [/font][/color][color=#770088][font=monospace]else [/font][/color][color=#666666][font=monospace]{[/font][/color]
[color=#666666][font=monospace]        [/font][/color][color=#004499][font=monospace]actions[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]log[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]debug[/font][/color][color=#666666][font=monospace]([/font][/color][color=#AA2222][font=monospace]'User chose to convert their job to grayscale.'[/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]        [/font][/color][color=#004499][font=monospace]actions[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]job[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]convertToGrayscale[/font][/color][color=#666666][font=monospace]([/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#666666][font=monospace]}[/font][/color]
[color=#666666][font=monospace]    [/font][/color][color=#666666][font=monospace]} [/font][/color][color=#770088][font=monospace]else [/font][/color][color=#666666][font=monospace]{[/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#004499][font=monospace]actions[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]log[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]debug[/font][/color][color=#666666][font=monospace]([/font][/color][color=#AA2222][font=monospace]'Canceling job due to high number of color pages and user not running client software.'[/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]      [/font][/color][color=#004499][font=monospace]actions[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]job[/font][/color][color=#666666][font=monospace].[/font][/color][color=black][font=monospace]cancel[/font][/color][color=#666666][font=monospace]([/font][/color][color=#666666][font=monospace])[/font][/color][color=#666666][font=monospace];[/font][/color]
[color=#666666][font=monospace]    [/font][/color][color=#666666][font=monospace]}[/font][/color]
[color=#666666][font=monospace]  [/font][/color][color=#666666][font=monospace]}[/font][/color]
[color=#666666][font=monospace]}[/font][/color]
[color=black][font=monospace]​[/font][/color]

Posted

Hi, thank you for coming back to me.

 

What i am trying to do is initially convert all emails to black and white as part 1 of the rule, then the second part if the job still has colour prompt them to consider changing to black and white.

 

The job is converted to black and white fine for the email, however i am still getting a pop up asking if i want the email printed in colour or black and white.

 

/** Convert all email printing to grayscale
*
* Implement an organization wide policy that no emails should be printed in
* color.  Often emails contain color in links or headers that adds no value.
* This script automatically converts all emails (printed from Outlook) to
* grayscale.
*/
function printJobHook1(inputs, actions) {
 /*
 * Set this to the unique text that appears in the print queue when emails are
 * printed by your organization's email client. This script will work with
 * email applications that use a specific identifiable string in the job
 * title. If the application only uses the email title for instance then this
 * approach will not work.
 */
 var EMAIL_APPLICATION_TITLES = [ 'Microsoft Outlook', 'Microsoft Office Outlook', 'outbind://' ];
 
 // see if the document name matches any of the known email titles
 if (matchesAny(inputs.job.documentName, EMAIL_APPLICATION_TITLES)) {
   // this job is an email, convert it to grayscale (no harm done if the job is
   // already grayscale)
   actions.job.convertToGrayscale();
   
   // if the user is running the client tool we'll send them a courtesy message
   // to let them know
   if (inputs.client.isRunning) {
     actions.client
       .sendMessage('Your email has been automatically converted to '
                    + 'grayscale.');
   }
 }
}


function matchesAny(str, matchStrs, actions) {
 if (str == null || matchStrs == null) {
   return false;
 }
 
 for ( var i in matchStrs) {
   if (str.match(matchStrs[i])) {
     return true;
   }
 }
 
 return false;
}
/*
* Request user for grayscale/color printing
*
*/
function printJobHook2(inputs, actions) {
 /*
 * This print hook will need access to all job details
 * so return if full job analysis is not yet complete.
 * The only job details that are available before analysis
 * are metadata such as username, printer name, and date.
 *
 * See reference documentation for full explanation.
 */
 
 var CONVERT_MESSAGE = 'Your job contains colour pages. Would you like to convert your job to grayscale? Selecting "No" will print the job in color, Selecting "YES" will change the job to greyscale.';
 
 
 if (!inputs.job.isAnalysisComplete) {
   // No job details yet so return.
   return;
 }
 
 if (inputs.job.isColor) {
   /* Color job, ask the use if they want to print. 
   */
   if (inputs.client.isRunning) {
     // User is running the client software. Ask if they want to convert to grayscale or cancel.
     var response = actions.client.promptYesNo(CONVERT_MESSAGE);
     
     if (response == 'NO') {
       actions.log.debug('User chose to keep on printing in color');
     } else if (response == 'TIMEOUT') {
       actions.log.debug('Dialog timed out, canceling job.');
       actions.job.cancel();
     } else {
       actions.log.debug('User chose to convert their job to grayscale.');
       actions.job.convertToGrayscale();
     }
   } else {
     actions.log.debug('Canceling job due to high number of color pages and user not running client software.');
     actions.job.cancel();
   }
 }
}
function printJobHook(inputs, actions) {
 printJobHook1(inputs, actions);
 printJobHook2(inputs, actions);
}​

  • 2 weeks later...
Posted

Nice piece of scripting there, I can see what you're trying to do here :)

 

I always enjoy scripting so I've had a crack at this and changed the script a little bit so it's easier to manage on your behalf. The reason it's not working as expected is because the email job is technically still "color" even though it converted in the first function. The reason it's still technically color is because PaperCut does a conversion on the spool file when it's ready for printing - because the script isn't finished yet, the job is held until that script has been fully run which is causing a double-up of prompts because both IF statements at that point are technically true.

 

Here's the revised script I had a play with - I had to host on pastebin because this reply was too long :p

 

I've joined the two printJobHooks you had referenced into a single function, and joined a few if statements so it's basically checking on the below:

 

1) If the job is a color job AND an email, then it'll run through the first IF statement and automatically convert to grayscale

2) If the job is color and is NOT an email, then it'll prompt the user whether or not they want to convert to grayscale, giving them a choice

 

I've tested here on all four test cases and seems to work okay - have a test and see if this is what you're after!

  • Thanks 1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...