Использование пользовательских сценариев печати документов в O&K Print Router

Начиная с версии 3.00 O&K Print Router поддерживает выполнение пользовательских сценариев ускорения печати документов и распределения нагрузки на принтеры и принт-сервер. В качестве языка сценариев используется Chaiscript. Более подробную информацию о языке программирования Chaiscript можно найти на официальном веб-сайте - ChaiScript.

При печати документа на принтер O&K Print Router, сначала выполняются правила печати и перенаправления документов, заданные в настройках программы "Redirect". После обработки этих правил выполняется пользовательский скрипт печати (если задан) "Custom Script":

Для использования в скриптах доступны следующие функции:

Для каждого задания печати доступна следующая информация о печатаемом документе:

Для задания пользовательских правил печати необходимо набрать или вставить текст скрипта на вкладке "Custom Script" настроек программы и сохранить скрипт печати. Используя кнопку "Test", можно проверить правильности синтаксиса скрипта. В режиме тестирования печать на принтере не производится.

Примеры использования.

Печать документа на разных принтерах в зависимости от размера бумаги:

var printers = VectorOfString() // Объявляем переменную для списка принтеров

if (PaperSize == "A4") // Если размер документа "А4"
{
	// Добавляем принтеры в список
	printers.push_back("HP LaserJet 9000 PCL6")
	printers.push_back("Microsoft XPS Document Writer")

	// Печатаем документ на ОДНОМ, НАИБОЛЕЕ ДОСТУПНОМ принтере из списка с числом копий 1
	PrintBalanced(printers, 1)
} 
else // Если размер документа НЕ "А4"
{
	// Печатаем документ на одном принтере с числом копий 1
	Print("Microsoft XPS Document Writer", 1)
}

Печать документа на разных принтерах в зависимости от режима цветной печати:

var printers = VectorOfString() // Объявляем переменную для списка принтеров

if (Color == 1) // Если документ печатается в цвете
{
	// Добавляем принтеры в список
	printers.push_back("HP LaserJet 9000 PCL6")
	printers.push_back("Microsoft XPS Document Writer")
	
	// Печатаем документ на ВСЕХ принтерах из списка с числом копий 1
	PrintMultiply(printers, 1)
} 
else 
{
	// Печатаем документ на одном принтере с числом копий 1
	Print("Microsoft XPS Document Writer", 1)
}

Печать документа на разных принтерах с разным числом копий документа:

К примеру, если мы печатаем документ с числом копий больше 1 - мы хотели бы распределить печать между тремя принтерами в соотношении 20%, 30% и 50%.

То есть, мы отправили на 10 копий документа на O&K Print Router и хотим распечатать 2 копии на принтере HP LaserJet 9000 PCL6, 3 копии на Brother DCP-7070DW и 5 копий на принтере Xerox WorkCentre Pro 275.

Для этого, необходимо создать следующий скрипт печати:
if (Copies > 1) // Если число копий документа больше 1
{
	var copies1 = Copies * 0.2 // вычисляем 20% от общего числа копий
	Print("HP LaserJet 9000 PCL6", copies1) // вычисляем 30% от общего числа копий
	
	var copies2 = Copies * 0.3 // вычисляем 30% от общего числа копий
	Print("Brother DCP-7070DW Printer", copies2) // печатаем на втором принтере 30% копий
	
	var copies3 = Copies - copies1 - copies2 // вычисляем оставшееся число копий
	Print("Xerox WorkCentre Pro 275", copies3) // печатаем остальные копии на третьем принтере
}
else
{
	Print("Xerox WorkCentre Pro 275", Copies) // если число копий 1 - печатаем документ на этом принтере
}

Печать страниц одного документа на разных принтерах в зависимости от режима цветной печати:

var printersA4 = VectorOfString() // Variable for printers list
printersA4.push_back("HP LaserJet 9000 PCL6") // Add printer to the list

PrintPages(printersA4, "A4", 0, 1, 0) // будут напечатаны все страницы А4, независимо от их цвета, в 1-й копии

var printersA3 = VectorOfString() // Variable for printers list
printersA3.push_back("Xerox WorkCentre 6015N") // Add printer to the list

PrintPages(printersA3, "A3", 1, 3, 0) // будут напечатаны все Ч/Б страницы А3, в 3-х копиях.
PrintPages(printersA3, "A3", 2, 2, 0) // будут напечатаны все цветные страницы А3, в 2-х копиях.

var printers = VectorOfString() // Variable for printers list
printers.push_back("HP Designjet T795 44in HPGL2") // Add printer to the list

PrintPages(printers, "", 0, 1, 0) // будут напечатаны все оставшиеся страницы в 1-й копии, независимо от размера бумаги и цвета.

Печать документа на разных принтерах в зависимости от имени документа:


if (DocName.find("sample text") == 0) // Имя документа начинается с "sample text"
{
	Print("printer1", 1) // Печатаем документ на printer1 с 1 копией
}

if (DocName.find("sample text") != size_t(-1)) // Имя документа содержит "sample text" в любой части строки
{
	Print("printer2", 1) // Печатаем документ на printer2 с 1 копией
}

if (DocName.find("sample text") == size_t(-1)) // Имя документа не содержит "sample text"
{
	Print("printer3", 1) // Печатаем документ на printer3 с 1 копией
}