If the need is to batch print a specific page range, i.e. not the whole document, but a selection of pages, and do this to all the selected PDFs, then the best way is to merge all these documents page selection and then print the result document.
This can be done with the
merge tool, but manually typing the pages to print, if many documents, can be tedious, so better create a script to automate this.
/****************************************************/
//http://cwestblog.com/2012/03/10/jscript-using-inputbox-and-msgbox/
(function(vbe) {
vbe.Language = "VBScript";
vbe.AllowUI = true;
var constants = "OK,Cancel,Abort,Retry,Ignore,Yes,No,OKOnly,OKCancel,AbortRetryIgnore,YesNoCancel,YesNo,RetryCancel,Critical,Question,Exclamation,Information,DefaultButton1,DefaultButton2,DefaultButton3".split(",");
for (var i = 0; constants[i]; i++) {
vbe.eval("vb" + constants[i]);
}
InputBox = function(prompt, title, msg, xpos, ypos) {
var params = [];
params.push(toVBStringParam(prompt));
if (title != null) {
params.push(toVBStringParam(title));
if (msg != null) {
params.push(toVBStringParam(msg)); {
if (xpos != null) {
params.push(xpos);
if (ypos != null) {
params.push(ypos);
}
}
}
}
}
return vbe.eval('InputBox(' + params.join(",") + ')');
}
MsgBox = function(prompt, buttons, title) {
return vbe.eval('MsgBox(' + [toVBStringParam(prompt), buttons != null ? buttons : "Empty", toVBStringParam(title)].join(",") + ')');
};
function toVBStringParam(str) {
return str != null ? 'Unescape("' + escape(str + "") + '")' : "Empty";
}
})(new ActiveXObject("ScriptControl"));
/****************************************************/
var pages = InputBox('Leave empty to print all the pages', "Specify the pages to print");
if (typeof pages != 'undefined') {
var Merger = pdfe.CreateDocumentMerger();
var ProgressBar = pdfe.ProgressBar;
ProgressBar.max = pdfe.SelectedFiles.count;
for (var i = 0; i < pdfe.SelectedFiles.count; i++) {
ProgressBar.position++;
var srcFilename = pdfe.SelectedFiles(i).filename;
pdfe.echo('Merging: ' + srcFilename);
if (Merger.MergeDocument(srcFilename, pages)) pdfe.echo(' [OK]', 0, 1)
else pdfe.echo(' [Failed]', 0xFF0000, 1);
}
//save to a temporary file
var fso = new ActiveXObject("Scripting.FileSystemObject");
var MergedFilename = fso.BuildPath(fso.GetSpecialFolder(2 /*TemporaryFolder*/ ), 'MergePrint.pdf');
if (Merger.EndAndSaveTo(MergedFilename)) {
pdfe.echo('Printing');
var objShell = new ActiveXObject("shell.application");
//print it using the default associated application.
//Only works if the default PDF application has the print verb specified.
// objShell.ShellExecute(MergedFilename, "", "", "Print", 1);
//Print with Sumatra PDF
// objShell.ShellExecute("C:\\Program Files (x86)\\SumatraPDF\\SumatraPDF.exe", '-print-dialog "'+MergedFilename+'"', "", "Open", 1);
//Open it in the default PDF reader
objShell.ShellExecute(MergedFilename, "", "", "Open", 1);
} else {
pdfe.echo('Failed', 0xFF0000);
}
pdfe.echo('Done');
} else pdfe.echo('Canceled');
This script prompts the user for the pages to print (same format as with the merge tool "pages to include" column), executes the merge and then opens, or prints, the result PDF.
Just import it into your
PDF-ShellTools scripts and you will get a new entry, under the shell context menu PDF-ShellTools>My Scripts sub-menu, named "Print page selection".
Let me know if you are missing any functionality from your suggested "Print function" idea.