使用Shell脚本作为虚拟打印机


10

我有一个Shell脚本,该脚本以PDF文件为参数,并使用其他打印机特定的选项进行打印。如何将此脚本添加为可从GUI选择的虚拟打印机?

Shell脚本是一个手动双工脚本,可获取PDF文件,打印偶数页,使用zenity提示用户提示,要求用户翻转页面然后打印奇数页。

我当前的工作流程是:

  1. 文件->打印->保存到文件-> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

有什么办法使其成为:

  1. 文件->打印-> my_script_as_virtual_printer

注意:这是在Linux薄荷13肉桂上。我已经尝试过,gnome-manual-duplex但是对我不起作用。


可以从中打印到PDF文件的GUI对话框 标准GTK打印对话框

my_duplex_script

#!/bin/bash

lp_args=
while getopts o: opt
do
    case "$opt" in
        o)  lp_args="$lp_args -o $OPTARG" ;;
        \?) echo >&2 Invalid argument; exit 1 ;;
    esac
done
shift `expr $OPTIND - 1`

file=$1
page_count=$(pdfinfo "$file" | grep Pages | awk '{print $2}')
is_odd=`expr $page_count % 2`

if [ $is_odd -eq 1 ]
then
    #outputting blank
    echo | lp -s -t "$file"-blank
fi

#printing even reversed
lp -s -o page-set=even -o outputorder=reverse $lp_args -t "$file"-even "$file"

if zenity --question --text="Flip and reinsert the entire stack when printing has finished." --ok-label="Proceed" --cancel-label="Cancel"
then
    #printing odd reversed
    lp -s -o page-set=odd -o outputorder=reverse $lp_args -t "$file"-odd "$file"
else
    echo >&2 User abort
    exit 1
fi

exit 0

Answers:


2

我从来没有尝试过,但是有一个叫做的工具tea4cups,听起来像您可以对脚本进行预钩,以进行打印。然后,您可以取消此打印,而实际上不通过杯子进入真正的打印机,而是允许脚本执行打印。

摘抄

可能性是无止境 :

  • 将同一作业同时发送到多台打印机,而CUPS无法做到。
  • 自动完成所有打印作业的PDF归档。
  • 禁止重复打印作业(示例配置文件中显示了一个简单的示例)
  • 在15分钟内创建一个打印会计解决方案(是的,这是真实的)
  • 等等...

Tea4cups提供以下便利:

Tea4CUPS提供了三种启动命令的方式:

  • 过滤器:过滤器可以在将输入数据发送到打印机或使其可用于以下定义的前后挂钩之前修改输入数据。当前,可以为每个打印队列定义一个过滤器。
  • prehooks:保证在将打印作业发送到真实打印机之前启动它们。退出-1的任何预钩都可以取消打印作业。可以为特定的打印队列定义任意数量的预钩。
  • posthooks:保证将这些任务在将打印作业发送到真实打印机之后启动,除非先前已通过预钩将其取消。可以为特定的打印队列定义任意数量的后钩。

2

如何将此脚本添加为可从GUI选择的虚拟打印机?

要投放虚拟打印机,只需编辑您的/etc/printcap。这不是很容易,因为PRINTCAP的语法 需要习惯。

下面是使用Samba的PDF Service的示例示例:

# /etc/printcap
# PDF Service entry

lp|pdf|PDF Printer:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/pdf:\
        :af=/var/spool/lpd/pdf/acct:\
        :mx#0:sh:\
        :if=/usr/bin/smbprint:

此处,/usr/bin/smbprint脚本用作打印过滤器。打印机本身是/dev/null

也许您需要安装cups-bsd,但通常是默认配置。


请注意,这printcap是BSD lpr或lprNG的配置文件,而不是CUPS的配置文件,CUPS是当今的事实上的标准,也是Mint上的标准。
吉尔(Gilles)“所以

因此,我提到了该cups-bsd软件包,它在Mint上也可用,默认情况下已安装并且也得到很好的支持。cups-bsd不是lprng!它只是一个包装器,提供了Cups的BSD打印功能,以支持lpr用于打印的应用程序(例如xpdf)。

0

晚会晚了,但我想做同样的事情,但没有找到其他解决方案。

我将在这里写下我的解决方法,也许其他人会发现该解决方案有用。

  • 做了一个杯子过滤器,以捕获要打印的文件
  • 做一个后端来打印文件
  • 制作了一个简单易用的安装程序。

源代码在github上:https : //github.com/dentys03/manual_duplex_linux

它可以在任何HP打印机上使用。我猜很容易适应其他打印机。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.