Mac(和/或 Linux)的手动双面打印

Mac(和/或 Linux)的手动双面打印

我的打印机不支持自动双面打印。我正在寻找适用于我的 Mac 和 Linux 计算机的解决方案,而大多数 Windows 打印机驱动程序都存在此问题:

  • 在打印机屏幕上选中“手动双面打印”
  • 打印机开始打印一面
  • 出现一个对话框,要求我翻页
  • 打印机打印另一面。

我可以做的一件事是print odd pages,然后重新打开对话框print even pages,但这非常不方便,尤其是当我只想打印特定页面范围时文档的页面范围,因为 Mac 对话框每次都会忘记我之前的页面范围。当打印 2 页双面或更改此打印输出的其他设置时,情况会变得更加不方便。

是否有某种工具可以做到这一点?或者也许有一个“虚拟打印机驱动程序”可以位于对话框和实际打印机驱动程序之间,用于管理这些步骤?(Windows 工具http://en.wikipedia.org/wiki/FinePrint可以做类似的事情,但我不需要它的所有功能,而且我需要在 Mac/Linux 上使用它。)

或者有人可能知道一个技巧,如何使打印对话框保持打开状态,即“打印,但不关闭”?

更新

似乎还没有这样的工具。实现这样的工具有多难?它需要集成在哪里——作为 CUPS 打印机驱动程序,还是作为对话框打印操作的钩子?它可以跨平台工作吗,还是必须是 Mac/Linux 专用的?

有 Mac/Linux/驱动程序编程经验的人可以解释一下这个问题吗?

解决方案

目前的解决方案:

创建 Apple Automator 脚本:


行动:提取奇数页和偶数页 [所有页面保存在单独的文件中]


行动:运行 Shell 脚本 [传递输入作为参数]

mv "$1" /tmp/odd.pdf
mv "$2" /tmp/even.pdf
lpr /tmp/odd.pdf

行动:请求确认 [“请翻页”]


行动:运行 Shell 脚本 [传递输入作为参数]

lpr /tmp/even.pdf

它还不完美。非常欢迎提出改进和替代建议!

答案1

几乎,但未达标但是:第 4 步只从第 1 步获取奇数页,然后从该集合中获取偶数页……这不好。我稍后会删除它,除非我想出一些聪明的方法。(第 1 步也可以立即创建两个文件,但您需要确认对话框。也许 Automator 中有一些“重新启动”或并行处理。


对于 Mac,Automator 是你的朋友:

  • 打开 Automator

  • 选择“打印插件”(打印插件是在打印对话框中可用的工作流程。它们接受正在打印的文档的 PDF 版本。在 10.6 Snow Leopard 之前,您可能直到要保存工作流程时才会看到此选项,而不是在创建空工作流程时。应该以相同的方式工作。)

  • 将以下项目拖到右侧的工作流中:

    1. “提取奇数页和偶数页”,并选择“奇数”

    2. “打印查找器项目”

    3. “要求确认”,写一些说明

    4. “提取奇数页和偶数页”,并选择“偶数”

    5. “打印查找器项目”

  • 保存它。它将最终出现在~/Library/PDF Services/打印对话框中,并因此成为 PDF 菜单的一部分。

在此处输入图片描述
Automator 来救援

在此处输入图片描述
打印对话框中的 PDF 菜单

当页数总数为奇数时,您必须对第一次运行的第一页或最后一页进行一些调整。(如果您将整叠纸放回打印机,那么当您完成后,最后一页可能会留在纸盘中。只需尝试调整步骤 3 中的说明即可。)

答案2

sourceforge 上有一个名为 duplexpr 的项目可以满足您的要求。

http://sourceforge.net/projects/duplexpr/

我很久以前就写了它,但没有人对它感兴趣,所以我没有更新它。如果我能获得 > 0 的活跃用户群,或者有人有兴趣帮助开发或测试它,我会再次对其进行开发。我甚至有更新的开发代码,其中包含一些附加功能。我还在尝试使其支持 GUI,以便可以从桌面使用它,而无需转到命令行。

这是一组 bash 脚本,用于模拟非双面打印机的双面打印。我每天都在用它 - 已经很多年了。

一个独特的功能是它允许批量双面打印,因此您可以一次打印多个作业,并且只需要翻转并重新插入整叠纸一次,而不是为每个作业翻转并重新插入一次。

当前版本(在 sourceforge 上)有几个问题。首先是他们改变了 bash。要使当前脚本正常工作(下载后),必须将每个脚本的第一行从 #!/bin/sh 更改为 #!/bin/bash

另一个问题是设计问题。打印机处理纸张的方式各不相同。有些打印机将打印面朝上打印,有些打印机将打印面朝下打印,等等。这意味着必须有多种双面打印算法。duplexpr 目前仅支持一种算法。它在 HP Deskjet 720 和 895(旧款)以及 HP C4480(新款)等打印机上完美运行。它几乎可以在我的 HP Laserjet(1006 和 1020)上运行。在这些打印机上,它打印的所有页面都是正确的,并且顺序正确,但打印作业完成后需要手动翻转每页(打印出来的顺序是 2/1、4/3......而不是 1/2、3/4)。

如果您有兴趣使用它,请查看并回复我。您可以通过 sourceforge 项目页面(上面的网址)向我发送电子邮件。

还有一些想法:

duplexpr 并不真正解决打印页面范围的问题。您可以使用大多数应用程序打印对话框中提供的“打印到文件”和“页面范围”选项来解决该问题。

一旦将输出保存到文件中(默认(至少对于 Linux)为 postscript 格式),您就有多种选择。然后,您可以通过 duplexpr 运行它(顺便说一下,它可以处理其他发帖者提到的奇数页问题)。

如果您可以使用命令行界面 (cli),那么 lp 命令(或 lpr,无论您安装了哪个)都有您可以指定仅奇数页、仅偶数页的选项,您甚至可以根据需要为其指定页面范围。如果这些都不符合您的喜好,那么有一个很棒的小型 GUI 实用程序 xpp 可以完成所有这些工作,甚至更多。它甚至可以让您为现有的打印机之一创建一个别名,该别名将只打印偶数页或奇数页。我经常使用它来在第二次双面打印(第二面)期间恢复卡纸和多页进纸,这样我就可以完成打印任何没有被丢弃的单面页面,而无需从头开始。

使用任何一种手动方法,如果页数是奇数,则只需向打印机发送换页符即可弹出最后一页:

echo -n $'\f' | lp

可以,或者您可以创建一个只包含换页符的文件并将其发送到 lp。到目前为止,这适用于我尝试过的每台打印机。

无论哪种方式,它都比记住不要重新插入最后一页等要容易得多。

高血压

答案3

答案4

根据这里和其他论坛上的评论,我提出了某种合并解决方案,合并了自动机Shell 脚本。据我所知,这样的解决方案尚未发布,因此这可能会派上用场。

你唯一需要得到的是pdftk 服务器,可从以下网址下载pdftk 的官方网站。通过安装 pdftk 服务器,您只需安装一个包,它可以让您使用 shell 脚本编辑 PDF 文件。让我引用官方网站上关于pdftk服务器的一些文字:

安装后,打开终端,输入 pdftk 并按回车键。Pdftk 将显示简短的使用信息。运行 man pdftk 即可访问 pdftk 文档。

此安装程序会在您的 Mac 上创建一个目录:/opt/pdflabs/pdftk/。它将包含一个包含 pdftk 程序的 bin 目录和一个包含完整 PDFtk 手册的 docs 目录。

使用 pdftk,我们将能够提取 pdf 的奇数页和偶数页(与 Automator 的内置提取器相比,速度非常快),重新排序和旋转页面。根据您使用的打印机,重新排序和旋转非常方便:您不必在打印奇数页和偶数页之间手动重新排序页面。仅供参考:在我的示例中,我使用了三星 ML-2165W 打印机(如果您想了解打印机内纸张的流动情况)。

基地来自Arjan 的最佳答案:

  • 打开 Automator
  • 选择“打印插件” (作为阿尔让之前写过:“...打印插件接受正在打印的文档的 PDF 版本...”这意味着第一个项目(你拖到工作流的)的输入将是该 PDF)
  • 拖动以下项目:

    1. 变量的设定值. 从下拉菜单中选择小路
    2. 运行 Shell 脚本:这是我们实现 pdftk 的部分。

      source ~/.bash_profile
      
      while read -r p; do
          pdftk A="$p" cat Aodd output /tmp/odd.pdf
      done
      
      lpr /tmp/odd.pdf
      

      解释:获取 .bash_profile 是必要的,否则 pdftk 命令将无法访问。while 循环是根据 pdftk 的手册页编写的:您只需知道它将输入 pdf 的奇数页提取到 odd.pdf 中,该文件将放在 /tmp 中。生成 odd.pdf 后,我们将使用 lpr shell 命令以默认设置打印它。

    3. 请求确认:输入一些说明文字。重要的:使用此工作流程时,您必须等到奇数页的打印过程完成,然后将页面放回输入托盘,然后按确定。否则,在您放回纸张之前,将执行即将到来的 shell 脚本(显然也包括打印)。

    4. 获取变量的值。将变量设置为路径。这是棘手的部分:从选项下拉菜单中选择忽略此操作的输入。这会将原始 PDF 的路径返回给您,因此您不会进一步提取刚刚提取的奇数页(这是上述评论中的一个问题)。

    5. 运行 Shell 脚本:打印偶数页(按向后顺序,以及旋转方向)。

      source ~/.bash_profile
      
      while read -r p; do
          pdftk A="$p" cat Aeven output /tmp/even.pdf
          pdftk /tmp/even.pdf cat end-1 output /tmp/even_backwards.pdf
          lpr -o orientation-requested=6 /tmp/even_backwards.pdf
      done
      

      解释:从源 PDF 文件中提取偶数页后,使用 pdftk 的 end-1 参数可得到反向 PDF。旋转将使用 lpr 命令的参数进行(我曾尝试使用 pdftk 旋转它,过程很顺利,但不知何故使用带有初始参数的 lpr 命令会将该 PDF 旋转回来,我猜是因为打印机的设置)。-o orientation-requested=6 可得到 180 度旋转(有关详细信息,请参阅 man lpr)。

该屏幕截图概括了整个工作流程。

在此处输入图片描述

相关内容