BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

この単純なBashスクリプトを使用して、自宅で両面ドキュメントを印刷します

自宅にレーザープリンターがあります。このHewlettPackardLaserJet Pro CP1525nwカラープリンターは古いモデルですが、確実にカラーで印刷できる優れた主力製品です。数年前に、RaspberryPiをプリントサーバーとして使用してホームネットワークに配置しました。

LaserJetは、私のホームオフィスに追加された素晴らしい機能です。昨年会社を立ち上げて以来、この小さなレーザープリンターを利用して、クライアントの会議、ワークショップ、トレーニングセッション用の配布物やその他の資料を印刷してきました。

このプリンターの唯一の不満は、片面のみを印刷することです。両面印刷する場合は、カスタム印刷ジョブを設定して自分で印刷する必要があります。これは不便であり、手動の手順が必要です。 LibreOfficeでは、最初に奇数ページを印刷し、次に反対側の偶数ページを印刷する前に用紙をリロードするように印刷ジョブを特別に設定する必要がありますが、逆の順序です。

この単純なBashスクリプトを使用して、自宅で両面ドキュメントを印刷します

誰かが送ってくれたPDFを印刷する必要がある場合でも、プロセスは同じです。 4ページのドキュメントの場合、最初に1ページと3ページを印刷してから、用紙をリロードし、2ページと4ページを逆の順序で印刷する必要があります。 GNOME印刷ダイアログで、奇数ページまたは偶数ページを印刷するには、[ページ設定]を選択する必要があります。

この単純なBashスクリプトを使用して、自宅で両面ドキュメントを印刷します

この単純なBashスクリプトを使用して、自宅で両面ドキュメントを印刷します

印刷方法に関係なく、全体的なプロセスは、奇数ページを印刷し、印刷されたページのスタックを用紙トレイにリロードしてから、偶数ページを逆の順序で印刷することです。 4ページのドキュメントを印刷する場合、偶数ページを逆の順序で印刷すると、4ページが3ページの裏に印刷され、2ページが1ページの裏に印刷されます。偶数ページを印刷するときに逆順で印刷するオプションを選択するのを忘れて、長い印刷ジョブを台無しにしました。

同様に、ページ数が奇数のドキュメントの処理方法を忘れがちです。 5ページのドキュメントでは、最初に1、3、および5ページを印刷します。ただし、印刷したページをプリンタにリロードする場合、5ページは必要ありません。代わりに、1ページと3ページのみをロードします。 、4ページは5ページの裏に印刷され、2ページは3ページの裏に印刷され、1ページの裏には何も印刷されません。

物事をより簡単で信頼性の高いものにするために、デュプレックスの印刷を自動化する単純なBashスクリプトを作成しました。これは基本的に奇数ページを印刷するためのラッパーであり、ページをリロードして(必要に応じて最後のページを削除して)、偶数ページを印刷するように通知します。

ドキュメントを両面印刷する必要があるときはいつでも、最初にドキュメントをPDFに変換します。これは非常に簡単です。 LibreOfficeには、PDFとして直接エクスポートするためのツールバーアイコンがあります。 [ファイル]-[名前を付けてエクスポート]-[PDFとしてエクスポート]の下に移動することもできます 同じことをします。または、他のアプリケーションでは、通常、PDFに保存があります 特徴。疑わしい場合は、GNOMEはプリンターではなくPDFファイルへの印刷をサポートしています。

この単純なBashスクリプトを使用して、自宅で両面ドキュメントを印刷します

この単純なBashスクリプトを使用して、自宅で両面ドキュメントを印刷します

仕組み

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の1行のスクリプトを使用してページ:を検索します 2番目のフィールドを印刷します。

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

これが奇数か偶数かを判断するために、モジュロ()を使用します )2で割り、余りを教えてくれる算術演算子。 2のモジュロは、偶数の場合は常にゼロになり、奇数の場合は1になります。この簡単なテストを使用して、ドキュメントのページ数が奇数かどうかを判断します。そのため、ドキュメントの残りの部分を印刷する前に、最後のページを削除する必要があります。

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

それで、 print-duplex.shを作成します Bashスクリプトは、 lprを呼び出すだけの簡単な問題です。 プリンタに出力を送信するための正しいオプションを使用( lpr -P "HP_LaserJet_CP1525nw" )、奇数ページを印刷するには( -o page-set =odd )または偶数ページ( -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"


  1. 星空を眺めるときは、この便利なBashスクリプトを使用してください

    Linuxがサーバーや開発者によって使用されていることについてよく話しますが、天文学を含む他の多くの分野でも使用されています。 Linuxで利用できる天文学ツールはたくさんあります。たとえば、スカイマップ、星図、望遠鏡を制御するための望遠鏡ドライブシステムへのインターフェイスなどです。しかし、天文学者にとっての1つの課題は、暗闇の中で目を動かしながらコンピューターを使用することです。 夜に野外で運動するとき、天文学者は彼らの暗視を維持する必要があります。人間の目が完全に拡張して低照度レベルに調整されるまで最大30分かかる場合があります。また、電話やラップトップを通常の色と明るさのレベルで

  2. 5 つの実用的な例を含む Bash スクリプト入門チュートリアル

    進行中の Unix Sed および Unix Awk シリーズと同様に、Bash スクリプトに関するいくつかの記事を投稿します。実用的な例ですべての bash スクリプト テクニックをカバーします。 シェルは、ユーザー コマンドを解釈するプログラムです。コマンドは、ユーザーが直接入力するか、シェル スクリプトと呼ばれるファイルから読み取るかのいずれかです。ユーザーからの入力を直接読み取る場合、シェルは対話型シェルとして呼び出されます。 シェルは、ファイルからコマンドを読み取って実行するときに、非対話型シェルとして呼び出されます。この場合、シェルはスクリプト ファイルの各行を上から下に読み取