Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

이 간단한 Bash 스크립트로 집에서 양면 문서 인쇄

집에 레이저 프린터가 있습니다. 이 Hewlett Packard LaserJet Pro CP1525nw 컬러 프린터는 구형 모델이지만 안정적이고 컬러로 인쇄하는 훌륭한 주력 제품입니다. 저는 몇 년 전에 Raspberry Pi를 인쇄 서버로 사용하여 홈 네트워크에 설치했습니다.

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로 저장이 있습니다. 특징. 확실하지 않은 경우 그놈은 프린터 대신 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 한 줄 스크립트를 사용하여 페이지:를 찾습니다. 두 번째 필드를 인쇄합니다.

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

이것이 홀수인지 짝수인지 알아내기 위해 모듈로(% ) 2로 나누고 나머지를 알려주는 산술 연산자. 2의 모듈로는 항상 짝수에 대해 0이고 홀수에 대해 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 ).

배쉬 스크립트

#!/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"