「稍後再列印」軟體

「稍後再列印」軟體

有時,當我在筆記型電腦上工作時,我想排隊一些文件以便稍後列印,因為當時我沒有連接到印表機。

然而,實際的印表機隊列並不是為此而設計的。他們立即嘗試列印文檔,一旦我連接到網絡,所有的人都突然開始列印,這通常不是我想要做的。此外,有時我想更改佇列中文檔的順序,這不是很容易,特別是當其中一些文檔開始列印時。

另外,有時列印會失敗,因為例如印表機用完紙張或碳粉,而我想將文件重新列印到另一台印表機。對於 例如CUPSsystem-config-printer;這並不簡單。我通常必須返回,重新開啟 PDF 閱讀器,然後重新開始。我所知道的 PDF 閱讀器都沒有讓您保留文件清單以供稍後列印,但這可能是 PDF 閱讀器的隱藏功能,我不知道。

無論如何,這就是我想要做的:

  • 指定我要列印的 PDF 清單。
  • 將該列表保留在磁碟上,以便我可以關閉應用程式或重新啟動而不會丟失整個列表。
  • 指定我想要提前將它們發送到的印表機,而當時實際上並未連接到這些印表機。
  • 指定列印選項,例如顏色、雙面列印和份數。
  • 稍後變更這些印表機指派和列印選項。
  • 等到我按下按鈕或執行命令來實際列印文件。
  • 單獨保留已列印文件的列表,以防列印失敗或我想稍後重新列印。

我知道我可以用 shell 腳本lpr、文字檔案中的路徑列表來破解一些東西,但我不禁覺得這個問題已經以更強大和優雅的方式解決了。

獎勵積分:

  • 不要求在 PDF 閱讀器中開啟文件。我想列印它們,而不是瀏覽它們,並且它們沒有理由必須是相同的應用程式。
  • 不止一份清單。
  • 也適用於 Postscript、DjVu 和其他頁面描述格式。
  • 從檔案總管中拖放。

有什麼建議麼?

答案1

我所做的如下——它並不像你要求的那樣通用,但它幾乎可以正常工作。您需要定義所有印表機,然後需要這兩個腳本:

  1. stop_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsdisable "$i"
        echo " " paused.
    done
    
  2. start_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsenable "$i"
        echo " " restarted.
    done
    

您必須將它們放在您的路徑中(例如~/bin)並使它們可以使用chmod +x.警告:我沒有任何名稱中帶有空格的印表機。在這種情況下,腳本沒有經過測試(但我確信我們的 shell 腳本專家之一會立即修復腳本;-)...)

現在,您可以發出:

[romano:~] % stop_printers
Printer PDF:  paused.
Printer ColorDEA:  paused.
Printer Deskjet_6980:  paused.
Printer fotocop5:  paused.

您可以從任何地方列印,印表機將暫停:

證據印表機

您可以看到您的佇列:

[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank    Owner   Job     File(s)                         Total Size
1st     romano  439     Bones_3+RG.pdf — Flesh depth  125952 bytes

(據我所知,列印佇列在重新啟動後仍然存在)。當你想列印時:

[romano:~] % start_printers         
Printer PDF:  restarted.
Printer ColorDEA:  restarted.
Printer Deskjet_6980:  restarted.
Printer fotocop5:  restarted.

lprm如果需要,請使用您可以刪除作業;lpr透過命令列對文件進行排隊,如果您想要不同的“清單”,沒有人禁止使用不同的名稱多次定義同一台印表機。

您也可以手動恢復每台印表機,只需根據cupsenable <printername>提示運行即可。

我認為您不能使用此解決方案做的是事後更改列印選項 - 您將必須為此將文件出隊並重新入隊。

答案2

我的包包(無恥插件),雙工做一些你想要的事情,並包括 bash 函數,這些函數可能對滾動你自己的版本有用。 (它是用 bash 編碼的,所以修改起來應該相對容易,如果可以的話我會提供幫助。)

它旨在模擬非雙面印表機上的雙面列印,並實現其自己的簡單列印佇列管理。它有 gui 和 cli 兩種介面。

當前版本僅以雙面列印,並且僅適用於非雙面印表機,但新版本正在開發中,它將處理具有雙面硬體的印表機,該硬體本質上只是印表機和佇列管理,沒有雙面模擬軟體。 (我有一個可用的腳本的 alpha 版本,如果有人想透過專案直接聯繫我等,它已經可以工作了。)

系統列印到目前預設印表機,但 dplx 和 duplex 腳本接受傳遞給 lp 的附加參數,並可用於設定 lp 理解的任何選項,例如印表機和其他屬性。

該系統目前處理 PDF、PostScript 和純文字檔案。

它將要做的一件事不是do 是列印使用「列印到文件」選項建立的文件之內阿克羅讀。這些文件無法與 lp 一起使用,而且我始終無法引起任何上游人員的注意以找出問題所在。

就個人而言,即使我的印表機可用,我也可以「離線」列印幾乎所有內容(使用大多數應用程式支援的「列印到檔案」選項)。它幫助我專注於我正在做的事情。後來,當我到達合適的斷點時,我會大量列印作業。

當您想要列印另一份內容而無需重新生成時,擁有列印佇列也非常有用,並且它對於處理卡紙或碳粉耗盡等印表機錯誤至關重要。

答案3

這個問題似乎沒有完整的解決方案,但這是我添加到我的函數中,.bashrc類似於拉馬諾的回答上面,還有自動完成的額外便利。

all-printers() {
    if [ "$*" = "" ]
    then
        # Print usage."
        printf "Usage:\n"
        printf "all-printers start\n"
        printf "all-printers stop\n"
        return 1
    elif ! [ "$1" = "stop" -o "$1" = "start" ]
    then
        printf "Unrecognized command: $1\n"
        return 1
    fi

    cut -f 1 -d '|' /etc/printcap |
    grep -v '^#' |
    while read printer_name
    do 
        if [ "$1" = "stop" ]
        then
            cupsdisable "$printer_name"
            printf "$printer_name stopped.\n"
        elif [ "$1" = "start" ]
        then
            cupsenable "$printer_name"
            printf "$printer_name started.\n"
        fi
    done
}
complete -W 'stop start' all-printers

相關內容