“稍后打印”软件

Nat*_*ver 12 pdf printing software-recommendation

有时,当我在笔记本电脑上工作时,我想将一些文档排好队以便稍后打印,因为我当时没有连接到打印机。

然而,实际的打印机队列并不是为此而设计的;他们立即尝试打印文档,然后我一上网就突然开始打印,这通常不是我想要做的。此外,有时我想更改队列中文档的顺序,这不是很容易,尤其是在其中一些已经开始打印之后。

此外,有时打印失败,因为例如打印机的纸张或碳粉用完,我想将文档重新打印到不同的打印机。这不是简单的 egCUPSsystem-config-printer; 我通常必须返回,重新打开 PDF 阅读器,然后重新开始。我所知道的 PDF 阅读器都没有让您保留待打印的文档列表,但这可能是我不知道的 PDF 阅读器的隐藏功能。

无论如何,这就是我想要做的:

  • 指定我要打印的 PDF 列表。
  • 将该列表保留在磁盘上,以便我可以关闭应用程序或重新启动而不会丢失整个列表。
  • 事先指定我想将它们发送到的打印机,而不是当时实际连接到这些打印机。
  • 指定打印选项,如颜色、双面打印和份数。
  • 稍后更改这些打印机分配和打印选项。
  • 等到我按下按钮或运行命令以实际打印文档。
  • 保留一份单独的已打印文档列表,以防打印失败或我想稍后重新打印。

我知道我可以用一个 shell 脚本lpr和一个文本文件中的路径列表来破解一些东西,但我不禁觉得这个问题已经以更健壮和优雅的方式解决了。

奖励积分:

  • 不需要在 PDF 阅读器中打开文档。我想打印它们,而不是浏览它们,而且没有理由它们必须是同一个应用程序。
  • 不止一份清单。
  • 也适用于 Postscript、DjVu 和其他页面描述格式。
  • 从文件管理器中拖放。

有什么建议?

Rma*_*ano 10

我所做的是以下 --- 它不像你问的那样通用,但它几乎可以正常工作。您需要定义所有打印机,然后需要以下两个脚本:

  1. stop_printers

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsdisable "$i"
        echo " " paused.
    done
    
    Run Code Online (Sandbox Code Playgroud)
  2. start_printers

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsenable "$i"
        echo " " restarted.
    done
    
    Run Code Online (Sandbox Code Playgroud)

您必须将它们放在您的路径中(例如~/bin)并使用chmod +x. 警告:我没有任何名称中带有空格的打印机。在这种情况下,脚本没有经过测试(但我确信我们的 shell 脚本的一位专家会立即修复脚本;-)...)

现在,您可以发出:

[romano:~] % stop_printers
Printer PDF:  paused.
Printer ColorDEA:  paused.
Printer Deskjet_6980:  paused.
Printer fotocop5:  paused.
Run Code Online (Sandbox Code Playgroud)

您可以从任何地方打印,打印机将暂停:

来自evince的打印机

你可以看到你的队列:

[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank    Owner   Job     File(s)                         Total Size
1st     romano  439     Bones_3+RG.pdf — Flesh depth  125952 bytes
Run Code Online (Sandbox Code Playgroud)

(AFAIK,打印队列在重新启动后是持久的)。当你想打印时:

[romano:~] % start_printers         
Printer PDF:  restarted.
Printer ColorDEA:  restarted.
Printer Deskjet_6980:  restarted.
Printer fotocop5:  restarted.
Run Code Online (Sandbox Code Playgroud)

lprm如果需要,使用您可以删除工作;lpr通过命令行将文档排入队列,并且如果您想要不同的“列表”,没有人禁止使用不同的名称多次定义相同的打印机。

您也可以手动恢复每台打印机,这只是cupsenable <printername>从提示运行的问题。

我不认为你可以用这个解决方案做的是事后更改打印选项——你将不得不为此使文档出队和重新入队。

  • +1 很好,但是,虽然您可能有自己的理由,但通过在 `cut` 部分使用适当的分隔符,可以更简单地填充数组:`cat /etc/printcap | 剪切 -d "|" -f 1 | grep -v "#"` 。通过摆脱翻译`tr`,您可以节省一些周期时间。如果您只需要第一个字段,则此方法有效。 (2认同)