与黑白页面分开的颜色进行打印

我的组织有租用的彩色打印机。 我们向出租者支付每页费用,彩页成本远高于黑白页面成本。 我们的用户在select正确的模式方面相当不错。 但是,当他们想要打印只有几页彩色页面的大型工作时,就会出现问题。 他们不希望通过手工search工作来查找彩色页面并将其分开,pipe理层希望他们不要以彩色成本打印数百个黑白页面。

例如,设想一台打印机,其中黑白页面的成本是1美分,彩色页面的成本是8美分。 用户想要打印200页的文档。 大多数页面只是黑色的文字,但有十页的彩色图表。 用户想要用彩色打印图表,但唯一的办法是用“彩色”打印整个作业,花费16美元,或手动find十个彩色页面,分别打印80¢,然后以1.80美元打印文档的其余部分,总共2.60美元,或者完全放弃彩色页面,只需要在B&W中以2美元的价格打印整个文档。

是否有一件软件可以在打印作业中自动查找彩色页面,将这些页面发送给彩色打印机,然后将其余作业打印到黑白打印机上? 最理想的是某种打印filter,这样用户就可以将整个作业打印成一个彩色作业,软件将拦截它,根据哪些页面是彩色的将其切断,然后将每个段打印到适当的位置打印机。 我发现了PaperCutNG ,它正是我想要的,但是,说实话,这不值得为这一function的钱。 我希望find一个免费的解决scheme。

我的打印服务器是Windows 2003机器,运行在那里的解决scheme会更好,但是如果需要,我可以转换到不同的操作系统。 客户端解决scheme也是可以接受的。

看看PDFsam :一个免费的,开源的工具(你猜对了)分割和合并PDF文件。 你也许可以编写脚本来达到你想要的效果。

wfaulk,你是怎么做到的?

我们已经有了这个function很长一段时间的工作。

它应该在打印驱动程序本身完成…在单声道和颜色之间自动更改。

值得检查你的制造商给你什么select,也许不同的驱动程序。

正如上面发布的人,一些打印会计软件这样做,并计算费用,但他们只是使用所提供的打印驱动程序。

您可以在服务器上创build两台打印机。 一套只打印黑色和另一种颜色。 您甚至可以为彩色打印机添加保密function,只有经过认可的用户才能打印到彩色打印机。 一台打印机对用户显示为两个。 也用这个设置了一定的页面大小或者强制双面打印。

过去经常使用它,运行Windows Server 2003时运行良好,不需要花费任何费用

您将需要find第三方打印服务器pipe理器,如您已经提到的剪纸。

一些其他解决scheme可能会包含以下服务器应用程序,但我不知道它们是否具体包括您的要求:

  • 打印pipe理器加
  • 打印机对等
  • Netop PrintLimit Pro
  • Equitrack

好吧,看起来我将不得不自己实现这个。 到目前为止,我有一个粗糙的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); } 

它已经有了一个优化,因为如果一个页面只包含两种颜色,即使其中一种颜色远不是黑色,白色或灰色,它也会将其标记为黑白。 我还需要实现一个filter来丢弃含有另一种颜色的像素的页面,还需要一个filter来标记那些颜色过多的页面,以滤除每一页上发生的颜色。 (我想如果有人打算用这个,他们打算至less打印一些黑白的页面。)

之后,我必须通过适当的队列实现打印每个集合。

希望我能弄清楚如何将Ghostscript和netpbm的东西放回到脚本中,即使我必须改变语言。

是否有一件软件可以在打印作业中自动find彩色页面,将这些页面发送给彩色打印机,然后将其余作业打印到黑白打印机上?

当然,用这个商业解决scheme 。 本video演示如何在单个打印机上执行此操作,以在只有less量颜色时强制黑白: https : //www.youtube.com/watch?v = USogiHUqjTc

本video演示如何将彩色打印作业自动发送到不同的打印机: https : //www.youtube.com/watch?v = Q7546WqTFq8

现在很容易结合你的要求。

  • 用两个通道创build一个configuration文件(一个用于黑白打印机,一个用于彩色打印机)
  • 为每个通道configuration[页面select]。 对于黑白通道,只能select黑白页面(提示:即使节省更多的金钱,select颜色太less的页面,也可以强制黑白打印);
  • 彩色打印机将其configuration为仅select彩色页面。

完成:-)我们在这里大量使用打印和共享,因为我们有configuration文件强制用户在黑白打印。 相信我,有一个很好的软件的一个很大的投资回报率。

在我们的打印机上,我们select“自动”而不是黑白或彩色。 汽车只收取我们的颜色部分,然后给我们不同的B&W。我们不必做任何事情 – 只要select“自动”