sh脚本和bash脚本_使用此简单的Bash脚本在家打印双面文档

sh脚本和bash脚本

我们家里有一台激光打印机。 惠普(Hewlett Packard)LaserJet Pro CP1525nw彩色打印机是一种较旧的型号,但它是一台出色的打印机,可以可靠地进行彩色打印。 几年前,我使用Raspberry Pi作为打印服务器将其放置在我们的家庭网络中

去年我成立了我的公司 ,我依靠这台小型激光打印机为客户会议,研讨会和培训课程打印讲义和其他材料。

我对这台打印机唯一的抱怨是它只能打印单面。 如果要双面打印,则需要设置一个自定义打印作业以自己完成。 这很不方便,需要手动操作。 在LibreOffice中,我需要专门设置打印作业,以首先打印奇数页,然后在相反面以相反顺序打印偶数页之前重新装入纸张。

LibreOffice print dialog

如果我需要打印某人发送给我的PDF,则过程相同。 对于四页文档,我首先需要打印页面1和3,然后重新装入纸张并以相反的顺序打印页面2和4。 在GNOME打印对话框中,您需要选择“页面设置”以打印奇数页或偶数页。

Gnome print dialog
Gnome page setup

无论我如何打印,整个过程都是打印奇数页,将一叠打印页重新装入纸盒,然后以相反顺序打印偶数页。 如果我要打印四页的文档,则以相反的顺序打印偶数页意味着第4页打印在第3页的背面,而第2页打印在第1页的背面。想象一下,当我在这少数情况下感到沮丧忘记打印偶数页并破坏了较长的打印作业时,选择了以相反顺序打印的选项。

同样,很容易忘记如何处理页数奇数的文档。 在一个五页的文档中,您首先要打印第1、3和5页。但是,当您将打印的页面重新加载到打印机中时,就不需要第5页。相反,您只想加载第1和3页。 ,则第4页将打印在第5页的背面,第2页将打印在第3页的背面,而第1页的背面则没有打印任何内容。

为了使事情变得更简单,更可靠,我编写了一个简单的Bash脚本,该脚本可以自动打印双面文件。 这基本上是一个包装器,用于打印奇数页,提醒我重新加载页面(并在需要时删除最后一页),然后打印偶数页。

每当我需要将文档打印为双面文档时,我都会先将文档转换为PDF。 这很容易做到。 在LibreOffice中,有一个工具栏图标可以直接导出为PDF。 您也可以在“ 文件”“导出为”“导出为PDF”下进行导航。 或在任何其他应用程序中,通常都有“ 保存为PDF”功能。 如有疑问,GNOME支持打印到PDF文件而不是打印机。

Libre Office toolbar
Export as PDF

这个怎么运作

保存为PDF后,让我的Bash脚本完成其余的工作。 这实际上只是使lpr命令自动化,使打印更容易。 它首先打印奇数页,提示我重新装入纸张,然后打印偶数页。 如果文档的页面数奇数,它还会提醒我在重新加载打印的页面时删除最后一页。 很简单

脚本的唯一“编程”部分是确定页数,并确定这是偶数还是奇数。 两者都很容易做到。

要确定页数,我使用pdfinfo命令。 这会生成有关PDF文档的有用信息。 这是一些示例输出:


   
   
$ pdfinfo All\ training\ -\ catalog.pdf
Creator:        Writer
Producer:       LibreOffice 6.3
CreationDate:   Fri Oct 18 16:06:07 2019 CDT
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          11
Encrypted:      no
Page size:      612 x 792 pts (letter)
Page rot:       0
File size:      65623 bytes
Optimized:      no
PDF version:    1.5

该输出非常容易解析。 为了获得页数,我使用AWK单行脚本查找Pages:并打印第二个字段。

 pages=$( pdfinfo "$1" | awk '/^Pages:/ {print $2}' ) 

为了弄清楚这是一个奇数还是偶数,我使用模( )算术运算符除以二并告诉我余数。 对于偶数,两个模的模数始终为零,对于奇数,模的模数始终为零。 我使用这个简单的测试来确定文档中的页面数是否为奇数,因此在打印文档的其余部分之前,需要删除最后一页:

 if [ $(( $pages % 2 )) -ne 0 ] ; then 

这样,编写print-duplex.sh Bash脚本很简单, 只需使用正确的选项调用lpr即可将输出发送到我的打印机( lpr -P“ HP_LaserJet_CP1525nw” ),以打印奇数页( -o page-set) =奇数 )或偶数页( -o page-set = even ),并以相反的顺序打印( -o outputorder = reverse )。

Bash脚本


   
   
#!/bin/sh
# print-duplex.sh
# simple wrapper to print duplex

cat<<EOF
$1 ($pages pages)
-------------------------------------------------------------------------------
Printing odd pages first
Please wait for job to finish printing...
-------------------------------------------------------------------------------
EOF

lpr -P "HP_LaserJet_CP1525nw" -o page-set=odd "$1"
sleep $pages

cat<<EOF
===============================================================================
Put paper back into the printer in EXACT OUTPUT ORDER (face down in tray)
then press ENTER
===============================================================================
EOF

pages=$( pdfinfo "$1" | awk '/^Pages:/ {print $2}' )

if [ $(( $pages % 2 )) -ne 0 ] ; then
  echo '!! Remove the last page - this document has an odd number of pages'
fi

echo -n '>'
read x

cat<<EOF
-------------------------------------------------------------------------------
Printing even pages
Please wait for job to finish printing...
-------------------------------------------------------------------------------
EOF

lpr -P "HP_LaserJet_CP1525nw" -o page-set=even -o outputorder=reverse "$1"

翻译自: https://opensource.com/article/20/4/print-duplex-bash-script

sh脚本和bash脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值