lpr:如何指定页面范围“3 到结束”?

Mar*_*ert 7 printing cups

CUPS文档并没有说如何指定页面范围,如“3至结束”。这可以在不知道文档页数的情况下完成吗?所以像lpr -o page-ranges=3-end -P myprinter

slm*_*slm 5

lpr范围

我不确定“结束”位,但如果您知道该系列的最后一个页码,则可以尝试此方法:

$ lpr -P myprinter -o page-ranges=3-10
Run Code Online (Sandbox Code Playgroud)

选项

您可以尝试查询打印机以查看它提供的选项。

$ lpoptions -p <printer name> -l
Run Code Online (Sandbox Code Playgroud)

例子

$ lpoptions -p mfc-8480dn -l
OptionTrays/Number of Input Trays: 1Trays *2Trays
PageSize/Media Size: *Letter Legal Executive A4 A5 A6 Env10 EnvMonarch EnvDL EnvC5 EnvISOB5 EnvISOB6
BrMediaType/BrMediaType: *PLAIN THIN THICK THICKERPAPER2 BOND TRANSPARENCIES ENV ENVTHICK ENVTHIN
InputSlot/InputSlot: MPTRAY TRAY1 TRAY2 *AUTO
Duplex/Duplex: DuplexTumble DuplexNoTumble *None
Resolution/Resolution: 300dpi *600dpi 2400x600dpi 1200dpi
TonerSaveMode/Toner Save: *Off On
Sleep/Sleep Time [Min.]: *PrinterDefault 2minutes 10minutes 30minutes
Run Code Online (Sandbox Code Playgroud)

选择

如果您有尝试发送到lpr命令的 postscript (PS) 流,则可以使用该命令psselect从 postscript 流中选择页面范围。

样本数据

例子

文本

使用脚本

$ enscript sample.txt -o - | psselect -p3- | ps2pdf - textfile.pdf
[ 16 pages * 1 copy ] left in -
[3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 
Wrote 14 pages, 30417 bytes

$ enscript sample.txt -o - | psselect -p3-5 | ps2pdf - textfile.pdf
[ 16 pages * 1 copy ] left in -
[3] [4] [5] Wrote 3 pages, 16329 bytes
Run Code Online (Sandbox Code Playgroud)

使用 pap

$ paps sample.txt - | psselect -p3- | ps2pdf - textfile.pdf
[3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] 
Wrote 17 pages, 44159 bytes
[saml@grinchy bin]$ paps sample.txt - | psselect -p3-5 | ps2pdf - textfile.pdf
[3] [4] [5] Wrote 3 pages, 15851 bytes
Run Code Online (Sandbox Code Playgroud)

PDF

$ pdftops example.pdf - | psselect -p3- | ps2pdf - pdffile.pdf
[3] [4] [5] [6] [7] [8] [9] [10] Wrote 8 pages, 687796 bytes

$ pdftops example.pdf - | psselect -p3-5 | ps2pdf - pdffile.pdf
[3] [4] [5] Wrote 3 pages, 372422 bytes
Run Code Online (Sandbox Code Playgroud)

发送到 lpr

您可以更改上述命令,而不是将输出通过管道ps2pdf发送到lpr,而是将其发送到,如下所示:

$ pdftops example.pdf - | psselect -p3-5 | lpr -P myprinter
Run Code Online (Sandbox Code Playgroud)

还有什么?

您可以使用lprenscript或来控制列数paps。您还可以使用lpr太来控制双面(双面样式)。

例子

2列

$ paps --columns=2 sample.txt - | psselect -p3-5 | ps2pdf - textfile.pdf
[3] [4] [5] Wrote 3 pages, 22244 bytes

$ enscript -2 sample.txt -o - | psselect -p3-5 | ps2pdf - textfile.pdf
[ 8 pages * 1 copy ] left in -
[3] [4] [5] Wrote 3 pages, 19700 bytes

$ pdftops example.pdf - | psselect -p3-5 | lpr -o number-up=2
Run Code Online (Sandbox Code Playgroud)

双工

$ pdftops example.pdf - | psselect -p3-5 | lpr -o number-up=2 -o sides=two-sided-short-edge
Run Code Online (Sandbox Code Playgroud)

参考

  • 只是发现人们总是可以指定“1-99999”......可能是最简单的解决方案 (2认同)

Gil*_*il' 4

如果您指定的数字大于实际页数,Cups 会忽略超出页数的请求。

\n\n
lpr -o page-ranges=3-999999999 \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

(不要使用超过 9 的9s,因为 Cups 会默默地将数字包裹在 2 31之外。)

\n\n
\n\n

当这个问题被问到时,Cups 可以自己完成。如果您遗漏了范围的一侧,则意味着结束。page-ranges=-42是 的一个(相当无用的)快捷方式page-ranges=1-42。要指定直到文件末尾的范围,您可以将末尾部分留空:page-ranges=3-。遗憾的是这个功能似乎已经消失了。

\n