ซอฟต์แวร์“ พิมพ์ภายหลัง”


12

บางครั้งเมื่อฉันทำงานกับแล็ปท็อปของฉันฉันต้องการจัดคิวเอกสารสองสามฉบับเพื่อพิมพ์ในภายหลังเนื่องจากฉันไม่ได้เชื่อมต่อกับเครื่องพิมพ์ในเวลานั้น

อย่างไรก็ตามคิวเครื่องพิมพ์จริงไม่ได้ถูกออกแบบมาสำหรับสิ่งนี้ พวกเขาพยายามพิมพ์เอกสารทันทีและทุกอย่างก็เริ่มพิมพ์ทันทีที่ฉันเข้าสู่เครือข่ายซึ่งโดยทั่วไปแล้วไม่ใช่สิ่งที่ฉันต้องการจะทำ ยิ่งกว่านั้นบางครั้งฉันต้องการเปลี่ยนลำดับของเอกสารในคิวซึ่งไม่ใช่เรื่องง่ายโดยเฉพาะเมื่อบางคนเริ่มพิมพ์

นอกจากนี้บางครั้งการพิมพ์ล้มเหลวเพราะเช่นเครื่องพิมพ์กระดาษหมดหรือผงหมึกและฉันต้องการพิมพ์เอกสารอีกครั้งไปยังเครื่องพิมพ์อื่น สิ่งนี้ไม่ตรงไปตรงมากับเช่นCUPSหรือsystem-config-printer; ฉันต้องกลับไปเปิดโปรแกรมอ่าน PDF อีกครั้งแล้วเริ่มใหม่อีกครั้ง ไม่มีตัวอ่าน PDF ที่ฉันรู้ว่าให้คุณเก็บรายการเอกสารที่จะพิมพ์ในภายหลัง แต่นี่อาจเป็นคุณสมบัติที่ซ่อนอยู่ของตัวอ่าน PDF ที่อื่นที่ฉันไม่รู้

อย่างไรก็ตามนี่คือสิ่งที่ฉันต้องการจะทำ:

  • ระบุรายการ PDF ที่ฉันต้องการพิมพ์
  • เก็บรายการนั้นไว้ในดิสก์เพื่อให้ฉันสามารถปิดแอปพลิเคชันหรือรีบูตโดยไม่สูญเสียรายชื่อทั้งหมด
  • ระบุเครื่องพิมพ์ที่ฉันต้องการส่งล่วงหน้าโดยไม่ต้องเชื่อมต่อกับเครื่องพิมพ์จริงในเวลานั้น
  • ระบุตัวเลือกการพิมพ์เช่นสีพิมพ์สองด้านและจำนวนสำเนา
  • เปลี่ยนการกำหนดเครื่องพิมพ์และตัวเลือกการพิมพ์ในภายหลัง
  • รอจนกว่าฉันจะกดปุ่มหรือเรียกใช้คำสั่งเพื่อพิมพ์เอกสารจริง
  • เก็บรายการเอกสารแยกต่างหากที่ถูกพิมพ์ไปแล้วในกรณีที่การพิมพ์ไม่ทำงานหรือฉันต้องการพิมพ์ซ้ำในภายหลัง

ฉันรู้ว่าฉันสามารถแฮ็คบางอย่างร่วมกับเชลล์สคริปต์lprและรายการเส้นทางในไฟล์ข้อความ แต่ฉันอดไม่ได้ที่จะรู้สึกว่าปัญหานี้ได้รับการแก้ไขแล้วในวิธีที่แข็งแกร่งและสง่างามยิ่งขึ้น

คะแนนโบนัส:

  • ไม่ต้องการให้เปิดเอกสารในโปรแกรมอ่าน PDF ฉันต้องการพิมพ์ไม่เรียกดูและไม่มีเหตุผลที่จะต้องใช้แอปพลิเคชันเดียวกัน
  • มากกว่าหนึ่งรายการ
  • สามารถใช้ได้กับ Postscript, DjVu และรูปแบบคำอธิบายหน้าอื่น ๆ
  • ลากและวางจากเครื่องมือจัดการไฟล์

ข้อเสนอแนะใด ๆ


เริ่มเงินรางวัลถ้าคุณมีชื่อเสียงมากพอ)
AB

เท่าที่ฉันเห็นสิ่งนี้จะต้องมีการแก้ไขคิวเครื่องพิมพ์อย่างง่ายตามที่ใช้งานในปัจจุบันcupsเท่านั้น คุณเพียงแค่พิมพ์ไปที่คิวเครื่องพิมพ์ที่ต้องการ แต่ให้หยุดการทำงานของเครื่องพิมพ์ไว้จนกว่าคุณจะตัดสินใจที่จะ "ปล่อย" งานเหล่านั้น ปุ่ม "พักสาย" คือทั้งหมดที่จำเป็น หรือฉันจะพลาดบางสิ่งบางอย่าง?
Jos

@Jos เวอร์ชันของsystem-config-printer-appletฉันอนุญาตให้ฉันพักและปล่อยงานพิมพ์รวมถึงย้ายไปยังเครื่องพิมพ์อื่น แต่ฉันไม่สามารถเปลี่ยนลำดับของงานพิมพ์หรือเปลี่ยนตัวเลือกการพิมพ์หลังจากส่งงาน โดยจุดนั้นเส้นทางไปยังเอกสารต้นฉบับจะหายไปนาน
นาธาเนียลเอ็มบีเวอร์

@AB แต่น่าเสียดายที่รางวัลต้องการคะแนนอินเทอร์เน็ต 75 คะแนนและฉันเป็นตัวชี้ 53 ​​ต่ำ
Nathaniel M. Beaver

คำตอบ:


10

สิ่งที่ฉันทำมีดังต่อไปนี้ --- มันไม่ได้หลากหลายตามที่คุณถาม แต่มันใช้งานได้ดี คุณต้องกำหนดเครื่องพิมพ์ทั้งหมดของคุณและจากนั้นคุณต้องใช้สคริปต์ทั้งสองนี้:

  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ได้ ถ้ำ : ฉันไม่มีเครื่องพิมพ์ใด ๆ ที่มีช่องว่างในชื่อของพวกเขา สคริปต์ไม่ได้ทดสอบในกรณีนั้น (แต่ฉันแน่ใจว่าหนึ่งในกูรูของสคริปต์เชลล์ของเราจะแก้ไขสคริปต์ในพริบตา; -) ... )

ตอนนี้คุณสามารถออก:

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

และคุณสามารถพิมพ์ได้จากทุกที่ที่คุณต้องการเครื่องพิมพ์จะหยุดชั่วคราว:

เครื่องพิมพ์จาก evince

คุณสามารถเห็นคิวของคุณ:

[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

(AFAIK คิวการพิมพ์จะคงอยู่ตลอดการบู๊ตใหม่) และเมื่อคุณต้องการพิมพ์:

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

การใช้งานlprmคุณสามารถลบงานออกได้ถ้าต้องการ lprในการจัดคิวเอกสารผ่านทางบรรทัดคำสั่งและหากคุณต้องการ "รายการ" ที่แตกต่างกันไม่มีใครห้ามการกำหนดเครื่องพิมพ์เดียวกันหลายครั้งด้วยชื่อที่แตกต่างกัน

นอกจากนี้คุณยังสามารถเรียกคืนเครื่องพิมพ์แต่ละเครื่องได้ด้วยมือมันเป็นเรื่องของการทำงานcupsenable <printername>จากพรอมต์

สิ่งที่ฉันไม่คิดว่าคุณสามารถทำได้ด้วยวิธีนี้คือการเปลี่ยนตัวเลือกการพิมพ์หลังจากความจริง --- คุณจะต้องทำการถอนและจัดคิวเอกสารอีกครั้ง


2
+1 ดี แต่ในขณะที่คุณอาจจะมีเหตุผลของท่านประชากรอาร์เรย์ของคุณอาจจะทำง่ายโดยใช้ตัวคั่นที่เหมาะสมในส่วน:cut คุณช่วยตัวเองรอบเวลาบางส่วนโดยการกำจัดของการแปลcat /etc/printcap | cut -d "|" -f 1 | grep -v "#" trงานนี้ให้คุณต้องการเพียงสนามแรกของคุณ
Cbhihe

1

แพ็คเกจของฉัน (ปลั๊กไร้ยางอาย), duplexprทำบางสิ่งที่คุณต้องการและมีฟังก์ชั่นทุบตีซึ่งอาจมีประโยชน์ในการกลิ้งเวอร์ชั่นของคุณเอง (มันเป็นรหัสในทุบตีดังนั้นควรแก้ไขได้ง่ายและฉันจะช่วยถ้าทำได้)

มันถูกออกแบบมาเพื่อเลียนแบบการพิมพ์สองหน้าสำหรับเครื่องพิมพ์ที่ไม่ได้พิมพ์สองด้านและใช้การจัดการคิวการพิมพ์อย่างง่ายของตัวเอง มีทั้งอินเตอร์เฟส gui และ cli

รุ่นปัจจุบันพิมพ์ได้เฉพาะในแบบดูเพล็กซ์และใช้ได้กับเครื่องพิมพ์ที่ไม่ใช่แบบดูเพล็กซ์เท่านั้น แต่เวอร์ชันใหม่จะทำงานในรูปแบบที่จะจัดการเครื่องพิมพ์ด้วยฮาร์ดแวร์ดูเพล็กซ์ซึ่งโดยพื้นฐานแล้วเป็นเพียงการจัดการเครื่องพิมพ์และคิว (ฉันมีสคริปต์เวอร์ชันอัลฟ่าซึ่งใช้งานได้แล้วหากใครต้องการติดต่อฉันโดยตรงผ่านโครงการ ฯลฯ )

ระบบจะพิมพ์ไปยังเครื่องพิมพ์เริ่มต้นปัจจุบัน แต่สคริปต์ dplx และ duplex ยอมรับอาร์กิวเมนต์เพิ่มเติมที่ส่งผ่านไปยัง lp และสามารถใช้เพื่อตั้งค่าตัวเลือกใด ๆ ที่ lp เข้าใจเช่นเครื่องพิมพ์และคุณสมบัติอื่น ๆ

ขณะนี้ระบบจัดการไฟล์ PDF, PostScript และไฟล์ข้อความธรรมดา

สิ่งหนึ่งที่มันจะไม่ทำคือไฟล์พิมพ์ที่สร้างขึ้นโดยใช้ตัวเลือกพิมพ์เป็นไฟล์จากภายใน Acroread ไฟล์เหล่านั้นใช้ไม่ได้กับ lp และฉันไม่เคยได้รับความสนใจจากกลุ่มต้นน้ำใด ๆ ที่จะทราบว่าปัญหาคืออะไร

โดยส่วนตัวแล้วฉันพิมพ์ทุกอย่าง "ออฟไลน์" (โดยใช้ตัวเลือกพิมพ์เป็นไฟล์ซึ่งแอพพลิเคชั่นส่วนใหญ่สนับสนุน) แม้ว่าเครื่องพิมพ์ของฉันจะพร้อมใช้งานก็ตาม มันช่วยให้ฉันจดจ่อกับสิ่งที่ฉันกำลังทำอยู่ ต่อมาเมื่อฉันถึงจุดพักที่เหมาะสมฉันจะพิมพ์ชุดงาน

การมีคิวการพิมพ์ยังดีมากเมื่อคุณต้องการพิมพ์สำเนาอื่นโดยไม่ต้องสร้างใหม่และจำเป็นสำหรับการจัดการกับข้อผิดพลาดของเครื่องพิมพ์เช่นกระดาษติดหรือหมึกหมด


นั่นเป็นแพ็คเกจที่น่าสนใจ แต่ดูเหมือนว่ามันจะมีขอบที่ขรุขระเล็กน้อยในตอนนี้และฉันไม่แน่ใจว่าฉันจะสามารถแก้ไขได้หากมีสิ่งผิดปกติเกิดขึ้น คุณพิจารณาอัปโหลดไปยัง Github หรือไม่
นาธาเนียลเอ็มบีเวอร์

@bariumbitmap - ฉันใช้มันทุกวันมานานกว่า 10 ปี (ตั้งแต่ครั้งแรกที่ฉันเขียนมัน) มันมีเสถียรภาพ ฉันยังมีรุ่นใหม่ในการพัฒนา หากคุณทำลายหรือต้องการคุณสมบัติเพิ่มเติมและยินดีที่จะทำงานกับฉันฉันจะแก้ไข ฉันยังไม่ได้เรียน git ดังนั้นฉันจึงใช้ github ให้น้อยที่สุด Sourceforge เป็นที่รู้จักกันดี
โจ

0

ดูเหมือนจะไม่มีวิธีแก้ปัญหาที่สมบูรณ์สำหรับปัญหานี้ แต่นี่เป็นฟังก์ชั่นที่ฉันเพิ่มเข้าไป.bashrcซึ่งคล้ายกับคำตอบของ Rmanoด้านบนพร้อมความสะดวกสบายเพิ่มเติมในการเติมข้อความอัตโนมัติ

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.