Моя организация арендует цветной принтер. Мы платим арендодателю постраничную стоимость, а стоимость цветной страницы намного превышает стоимость черно-белой страницы. Наши пользователи довольно хорошо выбирают правильный режим. Но проблема возникает, когда они хотят напечатать большое задание, состоящее всего из нескольких цветных страниц. Они не хотят вручную искать в задании цветные страницы и разделять их, а руководство не желает, чтобы они печатали сотни черно-белых страниц по цене цветной.
Например, представьте принтер, в котором черно-белые страницы стоят 1 цент, а цветные - 8 центов. Пользователь хочет распечатать 200-страничный документ. Большинство страниц - это просто черный текст, но есть десять страниц цветных диаграмм. Пользователь хочет распечатать диаграммы в цвете, но единственный способ сделать это - распечатать все задание в «цвете» стоимостью 16 долларов или вручную найти десять цветных страниц, распечатать их отдельно за 80 центов, а затем распечатайте оставшуюся часть документа за 1,80 доллара США, всего 2,60 доллара, или вообще откажитесь от цветных страниц и просто распечатайте все это в черно-белом режиме за 2 доллара.
Существует ли какое-то программное обеспечение, которое может автоматически находить цветные страницы в задании на печать, отправлять эти страницы на цветной принтер, а затем распечатывать остальную часть задания на черно-белом принтере? Идеальным был бы какой-то фильтр печати, чтобы пользователь мог просто распечатать все задание как цветное, а программное обеспечение перехватило бы его, нарезало бы его в зависимости от того, какие страницы были в цвете, и отправило бы каждый сегмент в соответствующий принтер. я обнаружил PaperCutNG, который делает именно то, что я хочу, но, честно говоря, он не стоит денег за эту единственную функцию. Я надеялся найти бесплатное решение.
Мой сервер печати - это машина под управлением Windows 2003, и решение, работающее на нем, было бы предпочтительнее, но при необходимости я могу перейти на другую ОС. Решение на стороне клиента также будет приемлемым.
wfaulk, как ты с этим справился?
у нас эта функция работает давно.
это то, что должно быть сделано в самом драйвере принтера ... автоматическое переключение между монохромным и цветным на лету.
Стоит проверить, какие опции дает вам ваш производитель, возможно, разные драйверы.
Как кто-то писал выше, некоторые из программ учета печати делают это ... и вырабатывают плату, но они просто используют драйвер печати, как предусмотрено.
Проверять, выписываться PDFsam: бесплатная утилита с открытым исходным кодом для (как вы уже догадались) разделения и объединения PDF-файлов. Вы можете написать сценарий, чтобы заставить его делать то, что вы хотите.
Вам нужно будет найти сторонний менеджер сервера печати, такой как papercut, о котором вы упомянули.
Некоторые другие решения могут включать следующие серверные приложения, хотя я не знаю, включают ли они то, что вы ищете:
На сервере можно создать два принтера. Один набор для печати только черного цвета, а другой - цветной. Вы даже можете повысить безопасность цветного принтера, чтобы только утвержденные пользователи могли печатать на цветном устройстве. Один принтер, который пользователям представляется как два. Также использовали это для установки определенного размера страницы или для принудительной двусторонней печати.
Часто использовали это в прошлом, и он работает хорошо и ничего не стоит при работе с Windows Server 2003.
Ладно, похоже, мне придется реализовать это самому. Пока у меня есть грубый скрипт на Perl (который использует множество системных вызовов ghostscript и netpbm), который определяет цветную или черно-белую окраску каждой страницы документа PostScript (или PDF):
#!/usr/bin/perl
use File::Temp qw/ tempfile tempdir /;
my $pages=0;
my $tempdir = tempdir(CLEANUP=>1);
my ($psfh, $psfn) = tempfile(SUFFIX=>'.ps', DIR=>$tempdir);
while (<>) {
# Write to temporary file
print $psfh $_;
# Count Pages
$pages++ if ( /\%\%Page:/ );
}
if ( $pages == 0 ) {
# Not DSC-conforming; count manually; ugh
}
my ($pdffh, $pdffn) = tempfile(SUFFIX=>'.pdf', DIR=>$tempdir, OPEN=>0);
# Convert to PDF
#print("ps2pdf ... ");
system("ps2pdf $psfn $pdffn");
#print("done\n");
# Count PDF pages
my $pdfpages = `pdfinfo $pdffn | egrep -e '^Pages'`;
$pdfpages =~ m/(\d+)/;
$pdfpages = $1;
#print("$pdfpages pages\n");
# Note: 1-based array!!
my @colorhist;
for ( my $i = 1; $i<=$pdfpages; $i++) {
print("Page $i\n");
my @colors = `gs -q -dFirstPage=$i -dLastPage=$i -dNOPAUSE -dBATCH -sDEVICE=ppmraw -sOutputFile=- $pdffn | ppmhist -noheader`;
foreach (@colors) {
m/^\s*(\d+)\s+(\d+)\s+(\d+)\s+\d+\s+(\d+)\s*$/;
my $color = (($1<<16) + ($2<<8) + $3);
my $instances = $4;
$colorhist[$i]{$color} = $instances;
#print "$color $instances\n";
}
}
my @colorbw;
for ( my $i = 1; $i<=$pdfpages; $i++ ) {
my %pagehist = %{$colorhist[$i]};
#print("page $i:\n");
my $numcolors = 0;
my $totinstances = 0;
foreach $key (keys(%pagehist)) {
#print "$key\n";
#print "\t$key $pagehist{$key}\n";
$numcolors++;
$totinstances += $pagehist{$key};
my $r = $key >> 16;
my $g = ( $key - ($r << 16) ) >> 8;
my $b = $key - ($r << 16) - ($g << 8);
if ( ( abs($r - $g) > 32 ) || ( abs($r - $b) > 32 ) || ( abs($g - $b) > 32 ) ) {
$colorbw[$i] = 2;
}
}
if ( $numcolors <= 2 ) {
$colorbw[$i] = 1;
}
print "$i\n" if ($colorbw[$i] > 1);
}
У него уже есть одна оптимизация: если страница содержит только два цвета, она помечает ее как черно-белую, даже если один из цветов далек от черного, белого или серого. Мне также нужно реализовать фильтр, чтобы отбрасывать страницы, которые имеют что-то вроде одного пикселя другого цвета, а также один, чтобы отмечать только те, которые чрезмерно цветны, чтобы отфильтровать вещи по цвету, которые происходят на каждой странице. (Я полагаю, что если кто-то собирается использовать это, он намеревается напечатать хотя бы часть страниц в черно-белом режиме.)
После этого я должен реализовать печать каждого из этих наборов через соответствующую очередь.
Надеюсь, я смогу понять, как вернуть Ghostscript и netpbm в сценарий, даже если мне придется сменить язык.
Существует ли какое-то программное обеспечение, которое может автоматически находить цветные страницы в задании на печать, отправлять эти страницы на цветной принтер, а затем распечатывать остальную часть задания на черно-белом принтере?
Конечно, остроумие коммерческое решение. В этом видео показано, как сделать это на одном принтере для принудительного черно-белого режима, когда цветных мало: https://www.youtube.com/watch?v=USogiHUqjTc
В этом видео показано, как автоматически отправлять задания цветной печати на другой принтер: https://www.youtube.com/watch?v=Q7546WqTFq8
Теперь их легко совместить по вашему запросу.
Готово :-) Мы активно используем здесь Print & Share, так как у нас есть профили, которые заставляют пользователей печатать в черно-белом режиме. Поверьте мне, отличное программное обеспечение дает большую рентабельность инвестиций.
На нашем принтере мы выбираем «Авто» вместо Ч / Б или цвета. Авто взимает с нас плату только за цветную часть, а затем по-другому взимает плату за черно-белый. Нам не нужно ничего делать - просто выберите «Авто»