我有一台打印机(三星M2022W)不支持双面打印。
但是,我想手动双面打印(也就是说,打印偶数页,然后将这些页面再次插入打印机并启动奇数页)。问题是我的 Debian 系统上没有“手动双工”选项。而且甚至没有“仅奇数/偶数页”选项。
如何在 *unix 上简单地手动双面打印?
答案1
我知道现在回答OP的答案有点晚了,但任何发现这个的人可能想看看我的双工Sourceforge 上的项目。它不仅可以模拟非双面打印机的双面打印,还允许您一次批量打印多个打印作业,这样您只需在整个批次中移除并重新插入页面一次。
Duplexpr 支持命令行和 GUI 界面。它是用 bash 编写的,具有许多可重用的函数,因此相对容易修改。十多年来,我每天都在几台不同的打印机上使用它,并且仍在继续开发它。
如果您只是想偶尔进行双面打印或需要访问打印机支持的所有精美功能,那么也请查看xpp
。它几乎可以做打印机能做的任何事情,但你必须每次都告诉它你想要什么,如果你经常使用它,它可能会变得有点旧。
答案2
尝试
$ lp -o page-set=odd filename
# ... manually flip pages ...
$ lp -o page-set=even filename
从文档这里。
答案3
有一个包叫gnome-manual-duplex
.它适用于许多开箱即用的打印机。对于其他人,可能需要手动设置。
答案4
我编写了一个简单的 shell 脚本用于手动双面打印。用于lpoptions -l
查找您的打印机支持的打印选项。
Printer=DeskJet-2130-series
PageSize=A4
InputSlot=Main
ColorModel=KGray
MediaType=Plain
OutputMode=Normal
file_list=()
print_status=()
file_count=0
red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'
current_file=0
for file in "$@"
do
echo "$file"
file_list[$file_count]=$file
print_status[$file_count]="pending"
file_count=$((file_count+1))
done
function print_status_text() {
fmt="%-100s%-12s\n"
for ((i=0;i<$file_count;i++))
do
file=${file_list[$i]}
status=${print_status[$i]}
if [ $status == "pending" ]
then
printf "$fmt" "${blu}$file${end}" "${blu}$status${end}"
elif [ $status == "ready" ]
then
printf "$fmt" "${mag}$file${end}" "${mag}$status${end}"
elif [ $status == "printing" ] || [ $status == "processing" ]
then
printf "$fmt" "${yel}$file${end}" "${yel}$status${end}"
elif [ $status == "skipped" ]
then
printf "$fmt" "${red}$file${end}" "${red}$status${end}"
else
printf "$fmt" "${grn}$file${end}" "${grn}$status${end}"
fi
done
}
trap ctrl_c INT
function ctrl_c() {
for ((e=$current_file;e<$file_count;e++))
do
print_status[$e]="skipped"
done
clear
print_status_text
exit 0
}
for ((n=0;n<$file_count;n++))
do
current_file=$n
clear
file=${file_list[$n]}
print_status[$n]="ready"
print_status_text
echo ""
echo -e "\e[93m\e[5mPress enter to START printing...\e[0m\e[0m"
read -p ""
clear
print_status[$n]="processing"
print_status_text
# separate even and odd pages
# remove old temp files
if [ -f "/tmp/odd.pdf" ]; then
rm "/tmp/odd.pdf"
fi
if [ -f "/tmp/even.pdf" ]; then
rm "/tmp/even.pdf"
fi
pdftk "$file" cat odd output /tmp/odd.pdf && pdftk "/tmp/odd.pdf" cat end-1 output "/tmp/out.pdf" && rm /tmp/odd.pdf && mv /tmp/out.pdf /tmp/odd.pdf >> /dev/null
pdftk "$file" cat even output /tmp/even.pdf && pdftk "/tmp/even.pdf" cat end-1 output "/tmp/out.pdf" && rm /tmp/even.pdf && mv /tmp/out.pdf /tmp/even.pdf >> /dev/null
evenCount=$(pdfinfo /tmp/even.pdf | awk '/^Pages:/ {print $2}')
oddCount=$(pdfinfo /tmp/odd.pdf | awk '/^Pages:/ {print $2}')
if [ $evenCount -gt 0 ] && [ $evenCount -lt $oddCount ]; then
# create blank pdf if not exists
if [ ! -f "/tmp/blank.pdf" ]; then
convert xc:none -page A4 /tmp/blank.pdf
fi
# join blank pdf and even pdf
pdftk /tmp/blank.pdf /tmp/even.pdf cat output /tmp/out.pdf
rm /tmp/even.pdf
mv /tmp/out.pdf /tmp/even.pdf
fi
if [ $oddCount -lt $evenCount ]; then
# create blank pdf if not exists
if [ ! -f "/tmp/blank.pdf" ]; then
convert xc:none -page A4 /tmp/blank.pdf
fi
# join blank pdf and even pdf
pdftk /tmp/blank.pdf /tmp/odd.pdf cat output /tmp/out.pdf
rm /tmp/odd.pdf
mv /tmp/out.pdf /tmp/odd.pdf
fi
clear
# print even pages
if [ $evenCount -gt 0 ]; then
lp -d "$Printer" -o PageSize="$PageSize" -o InputSlot="$InputSlot" -o ColorModel="$ColorModel" -o MediaType="$MediaType" -o OutputMode="$OutputMode" "/tmp/even.pdf" > /dev/null
print_status[$n]="printing"
print_status_text
echo ""
echo -e "\e[95m\e[5mPress enter to print SIDE TWO...\e[0m\e[0m"
read -p ""
fi
clear
# print odd pages
if [ $oddCount -gt 0 ]; then
lp -d "$Printer" -o PageSize="$PageSize" -o InputSlot="$InputSlot" -o ColorModel="$ColorModel" -o MediaType="$MediaType" -o OutputMode="$OutputMode" "/tmp/odd.pdf" > /dev/null
fi
print_status[$n]="completed"
print_status_text
done