博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sh脚本和bash脚本_使用此简单的Bash脚本在家打印双面文档
阅读量:2532 次
发布时间:2019-05-11

本文共 2317 字,大约阅读时间需要 7 分钟。

sh脚本和bash脚本

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

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

我对这台打印机唯一的抱怨是它只能打印单面。 如果要双面打印,则需要设置一个自定义打印作业以自己完成。 这很不方便,需要手动操作。 在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<
'
read x
cat<

翻译自:

sh脚本和bash脚本

转载地址:http://wcbzd.baihongyu.com/

你可能感兴趣的文章
1020 Tree Traversals (25)(25 point(s))
查看>>
第一次作业
查看>>
“==”运算符与equals()
查看>>
单工、半双工和全双工的定义
查看>>
Hdu【线段树】基础题.cpp
查看>>
时钟系统
查看>>
BiTree
查看>>
5个基于HTML5的加载动画推荐
查看>>
水平权限漏洞的修复方案
查看>>
静态链接与动态链接的区别
查看>>
Android 关于悬浮窗权限的问题
查看>>
如何使用mysql
查看>>
linux下wc命令详解
查看>>
敏捷开发中软件测试团队的职责和产出是什么?
查看>>
在mvc3中使用ffmpeg对上传视频进行截图和转换格式
查看>>
python的字符串内建函数
查看>>
Spring - DI
查看>>
微软自己的官网介绍 SSL 参数相关
查看>>
Composite UI Application Block (CAB) 概念和术语
查看>>
64位MATLAB和C混合编程以及联合调试
查看>>