আমাদের বাড়িতে একটি লেজার প্রিন্টার আছে। এই হিউলেট প্যাকার্ড লেজারজেট প্রো CP1525nw কালার প্রিন্টার একটি পুরনো মডেল, কিন্তু এটি একটি চমৎকার ওয়ার্কহোর্স যা বিশ্বস্তভাবে এবং রঙিন প্রিন্ট করে। আমি এটি কয়েক বছর আগে আমাদের হোম নেটওয়ার্কে আমাদের রাস্পবেরি পাইকে প্রিন্ট সার্ভার হিসেবে ব্যবহার করে সেট আপ করেছিলাম।
লেজারজেট আমার হোম অফিসের একটি চমৎকার সংযোজন। যেহেতু আমি গত বছর আমার কোম্পানি চালু করেছি, আমি এই ছোট লেজার প্রিন্টার নির্ভর করছি ক্লায়েন্ট মিটিং, ওয়ার্কশপ, এবং ট্রেনিং সেশনের জন্য হ্যান্ডআউট এবং অন্যান্য মেটেরিয়াল প্রিন্ট করার জন্য।
এই প্রিন্টারের সাথে আমার একমাত্র সমস্যা হলো এটি শুধু একপাশে প্রিন্ট করে। আপনি যদি ডাবল-সাইডেড প্রিন্ট করতে চান, তবে আপনাকে একটি কাস্টম প্রিন্ট জব সেট আপ করতে হবে যেন আপনি নিজে সেটি করতে পারেন। এটি অসুবিধাজনক এবং ম্যানুয়াল ধাপের প্রয়োজন। লিব্রেঅফিসে, আমাকে স্পষ্টভাবে প্রিন্ট জব সেট আপ করতে হয় যেন প্রথমে বিজোড় নম্বর পেজগুলো প্রিন্ট হয়, তারপর কাগজ রিলোড করে বিপরীত ক্রমে জোড় নম্বর পেজগুলো অন্য পাশে প্রিন্ট করা হয়।

যদি কেউ আমাকে পিডিএফ পাঠায় এবং আমাকে সেটি প্রিন্ট করতে হয়, প্রক্রিয়াটি একই। চার পেজের ডকুমেন্টের জন্য, আমাকে প্রথমে পেজ ১ এবং ৩ প্রিন্ট করতে হয়, তারপর কাগজ রিলোড করে পেজ ২ এবং ৪ বিপরীত ক্রমে প্রিন্ট করতে হয়। GNOME প্রিন্ট ডায়লগে, আপনাকে "পেজ সেটআপ" সিলেক্ট করতে হয় বিজোড় বা জোড় পেজ প্রিন্ট করার জন্য।


আমি যেভাবে প্রিন্ট করি, সামগ্রিক প্রক্রিয়াটি হলো বিজোড় নম্বর পেজগুলো প্রিন্ট করা, প্রিন্ট হওয়া পেজের স্ট্যাককে পেপার ট্রেতে রিলোড করা, তারপর জোড় নম্বর পেজগুলো বিপরীত ক্রমে প্রিন্ট করা। আপনি যদি চার পেজের ডকুমেন্ট প্রিন্ট করেন, জোড় নম্বর পেজগুলো বিপরীত ক্রমে প্রিন্ট করার মানে পেজ ৪ পেজ ৩-এর পেছনে প্রিন্ট হবে এবং পেজ ২ পেজ ১-এর পেছনে। কয়েকবার আমি জোড় নম্বর পেজ প্রিন্ট করার সময় বিপরীত ক্রমে প্রিন্ট সিলেক্ট করা ভুলে গিয়েছিলাম এবং একটি লম্বা প্রিন্ট জব বর্বাদ করলাম।
একইভাবে, বিজোড় সংখ্যক পেজ থাকা ডকুমেন্ট কীভাবে হ্যান্ডেল করবেন সেটি ভুলে যাওয়া সহজ। পাঁচ পেজের একটি ডকুমেন্টে, আপনি প্রথমে পেজ ১, ৩, এবং ৫ প্রিন্ট করেন। কিন্তু প্রিন্ট হওয়া পেজগুলো প্রিন্টারে রিলোড করার সময়, আপনি পেজ ৫ চান না। বরং, আপনি শুধু পেজ ১ এবং ৩ লোড করতে চান। অন্যথায়, পেজ ৪ পেজ ৫-এর পেছনে প্রিন্ট হবে, পেজ ২ পেজ ৩-এর পেছনে প্রিন্ট হবে, এবং পেজ ১-এর পেছনে কিছু প্রিন্ট হবে না।
জিনিসগুলো সহজ এবং বিশ্বস্ত করতে, আমি একটি সাধারণ ব্যাশ স্ক্রিপ্ট লিখেছি যা ডাবলেক্স প্রিন্টিং অটোমেট করে। এটি মূলত বিজোড় নম্বর পেজ প্রিন্ট করার, আমাকে পেজগুলো রিলোড করতে মনে করানোর (এবং প্রয়োজনে শেষ পেজটি সরাতে), তারপর জোড় নম্বর পেজগুলো প্রিন্ট করার একটি র্যাপার।
যখনই আমাকে ডাবলেক্স হিসেবে ডকুমেন্ট প্রিন্ট করতে হয়, আমি প্রথমে ডকুমেন্টটি পিডিএফ-এ কনভার্ট করি। এটি খুব সহজ। লিব্রেঅফিসে, সরাসরি পিডিএফ হিসেবে এক্সপোর্ট করার একটি টুলবার আইকন আছে। আপনি ফাইল— এক্সপোর্ট أز—এক্সপোর্ট أز পিডিএফ-এ নেভিগেট করেও একই কাজ করতে পারেন। বা অন্য যেকোনো অ্যাপ্লিকেশনে, সাধারণত একটি পিডিএফ হিসেবে সেভ ফিচার থাকে। সন্দেহ হলে, GNOME প্রিন্টার ছাড়া পিডিএফ ফাইলে প্রিন্ট করার সমর্থন করে।


কীভাবে এটি কাজ করে
একবার পিডিএফ হিসেবে সেভ করলে, আমি আমার ব্যাশ স্ক্রিপ্টকে বাকি কাজ করার দেই। এটি মূলত lpr কমান্ডগুলোর অটোমেশন যাতে প্রিন্ট করা সহজ হয়। এটি প্রথমে বিজোড় পেজগুলো প্রিন্ট করে, আমাকে কাগজ রিলোড করতে প্রম্পট করে, তারপর জোড় পেজগুলো প্রিন্ট করে। ডকুমেন্টে বিজোড় সংখ্যক পেজ থাকলে, এটি আমাকে প্রিন্ট হওয়া পেজগুলো রিলোড করার সময় শেষ পেজটি সরাতে মনে করায়। এটি খুব সহজ।
স্ক্রিপ্টের একমাত্র "প্রোগ্রামিং" অংশ হলো পেজ কাউন্ট নির্ধারণ করা, এবং বোঝা যে সেটি বিজোড় নাকি জোড়। দুটোই করা সহজ।
পেজ কাউন্ট নির্ধারণ করতে, আমি pdfinfo কমান্ড ব্যবহার করি। এটি একটি পিডিএফ ডকুমেন্ট সম্পর্কে উপযোগী ইনফো তৈরি করে। এখানে কিছু স্যাম্পল আউটপুট:
$ 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 ব্যাশ স্ক্রিপ্ট লিখা হলো lpr-কে সঠিক অপশন সহ কল করার বিষয় যাতে আউটপুট আমার প্রিন্টারে পাঠানো হয় (lpr -P "HP_LaserJet_CP1525nw"), বিজোড় নম্বর পেজ প্রিন্ট করতে (-o page-set=odd) বা জোড় নম্বর পেজ প্রিন্ট করতে (-o page-set=even), এবং বিপরীত ক্রমে প্রিন্ট করতে (-o outputorder=reverse)।
ব্যাশ স্ক্রিপ্ট
#!/bin/sh
# print-duplex.sh
# ডাবলেক্স প্রিন্ট করার জন্য সিম্পল র্যাপার
cat<<EOF
$1 ($pages pages)
-------------------------------------------------------------------------------
প্রথমে বিজোড় পেজগুলো প্রিন্ট করা হচ্ছে
কাজটি প্রিন্ট হওয়া পর্যন্ত অপেক্ষা করুন...
-------------------------------------------------------------------------------
EOF
lpr -P "HP_LaserJet_CP1525nw" -o page-set=odd "$1"
sleep $pages
cat<<EOF
===============================================================================
কাগজটি প্রিন্টারের সঠিক আউটপুট অর্ডারে ফিরিয়ে দিন (ট্রেতে ফেস ডাউন)
তারপর ENTER চাপুন
===============================================================================
EOF
pages=$( pdfinfo "$1" | awk '/^Pages:/ {print $2}' )
if [ $(( $pages % 2 )) -ne 0 ] ; then
echo '!! শেষ পেজটি সরান - এই ডকুমেন্টে বিজোড় সংখ্যক পেজ আছে'
fi
echo -n '>'
read x
cat<<EOF
-------------------------------------------------------------------------------
জোড় পেজগুলো প্রিন্ট করা হচ্ছে
কাজটি প্রিন্ট হওয়া পর্যন্ত অপেক্ষা করুন...
-------------------------------------------------------------------------------
EOF
lpr -P "HP_LaserJet_CP1525nw" -o page-set=even -o outputorder=reverse "$1"