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

use*_*551 10 printing cups shell-script

我有一个 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 mint 13 cinnamon 上。我试过了,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
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 2

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

摘抄

可能性是无止境 :

  • 同时将同一作业发送到多台打印机,而这对于 CUPS 来说是不可能的。
  • 自动对所有打印作业进行 PDF 归档。
  • 禁止重复的打印作业(示例配置文件中显示了一个简单的示例)
  • 在 15 分钟内创建打印会计解决方案(是的,这是真的)
  • ETC...

Tea4cups 提供以下便利:

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

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