2008-08-22 44 views
36

Tôi đang làm việc trên một ứng dụng web cần in âm thầm - không có sự tham gia của người dùng. Cách tốt nhất để thực hiện việc này là gì? Nó không thích nó có thể được thực hiện với đúng với Javascript, cũng không phải Flash và/hoặc AIR. Gần nhất tôi đã thấy liên quan đến một applet Java.In "Im lặng" trong Ứng dụng web

Tôi có thể hiểu tại sao ý tưởng xấu này chỉ cho bất kỳ trang web nào để có thể thực hiện việc này. Ví dụ cụ thể này là dành cho ứng dụng nội bộ và hoàn toàn có thể chấp nhận được nếu người dùng cần thêm URL vào danh sách trang web đáng tin cậy, cài đặt addon, v.v.

+0

giải pháp mà làm việc cho bạn? – noamtm

+4

Chúng tôi đã kết thúc sử dụng một applet Java. đó là một cơn ác mộng. Thông thường nó đã khủng khiếp là gì, nhưng vì điều này là cho Thế vận hội Bắc Kinh 2008, khoảng cách thêm và sự khác biệt ngôn ngữ đã làm cho nó trở thành một cơn ác mộng Cuối cùng, nó hoạt động "đủ" Nhưng một lần nữa, cơn ác mộng. nd nó. – Bill

+0

Nếu bạn đã vấp ngã ở đây chỉ để tìm thấy các tuyến đường applet Java không hoạt động rất tốt nữa, đây là một cuộc thảo luận tốt về nó: http://stackoverflow.com/questions/27057816 – tresf

Trả lời

0

Tôi phải trung thực, tôi đang nghĩ lớn ở đây .. Nhưng nó có thể không được thực hiện với một applet hoặc một số loại (có thể là Java hoặc bất cứ điều gì) được cho phép đáng tin cậy (chẳng hạn như trong vùng Intranet) hoặc một cái gì đó?

Có thể đáng xem xét điều khoản nào có thể cấp cho từng khu vực?

Theo dõi Google, tôi nghĩ bạn chắc chắn có thách thức, cho đến nay hầu hết các bài viết tôi đã thấy liên quan đến việc in tới printers connected to the server.

Nếu nội bộ của nó, có thể định tuyến in từ máy chủ đến máy in của bộ phận/người dùng hay không?

1

Tôi đã viết một tsr python thường xuyên thăm dò ý kiến ​​của máy chủ (nó kéo tần suất bỏ phiếu từ máy chủ) và in ra máy in nhãn. Là tương đối tốt đẹp.

Khi được viết bằng python, tôi đã sử dụng py2exe trên đó, sau đó cài đặt trình biên dịch inno, sau đó đặt vào mạng nội bộ và đã cài đặt người dùng.

Nó không tuyệt vời, nhưng nó hoạt động. Người dùng sẽ khởi chạy nó vào buổi sáng và chương trình sẽ nhận được công tắc diệt từ máy chủ vào ban đêm.

6

Dưới đây là hai mẫu mã bạn có thể thử:

:

<script> 
function Print() { 
    alert ("THUD.. another tree bites the dust!") 
    if (document.layers) 
    { 
    window.print(); 
    } 
    else if (document.all) 
    { 
    WebBrowser1.ExecWB(6, 1); 
    //use 6, 1 to prompt the print dialog or 6, 6 to omit it 
    //some websites also indicate that 6,2 should be used to omit the box 
    WebBrowser1.outerHTML = ""; 
    } 
} 
</script> 
<object ID="WebBrowser1" WIDTH="0" HEIGHT="0" 
CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"> 
</object> 

:

if (navigator.appName == "Microsoft Internet Explorer") 
{ 
    var PrintCommand = '<object ID="PrintCommandObject" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>'; 
    document.body.insertAdjacentHTML('beforeEnd', PrintCommand); 
    PrintCommandObject.ExecWB(6, -1); PrintCommandObject.outerHTML = ""; 
} 
else { 
    window.print(); 
} 

Bạn có thể cần thêm các trang web/trang web mà bạn đang thử nghiệm trên vùng intranet cục bộ của bạn.

0

Nếu chỉ là ứng dụng nội bộ, bạn có thể tránh in từ trình duyệt và gửi bản in trực tiếp từ máy chủ đến máy in gần nhất cho người dùng.

+0

Không, đó là một ứng dụng nội bộ theo nghĩa là nó có sẵn cho công chúng, nhưng nó sẽ ở những nơi như chuỗi bán lẻ khác nhau, vv – Bill

29

Dưới đây là những gì bạn cần làm để cho phép Firefox ngay lập tức in mà không hiển thị hộp thoại tùy chọn in.

  1. Nhập about: config tại thanh địa chỉ của Firefox và nhấn Enter.

  2. Nhấp chuột phải vào bất cứ nơi nào trên trang và chọn New> Boolean

  3. Nhập tên sở thích như print.always_print_silent và nhấn OK.


tôi thấy rằng ở đâu đó và nó đã giúp tôi

+1

Công trình này! Cảm ơn. Bất cứ ai biết nếu bạn có thể làm điều này là bất kỳ trình duyệt khác quá? – aron

+0

Xin cảm ơn! Đã tiết kiệm cho tôi giờ thất vọng! – patrickdamery

+1

Điều gì về IE và chrome? – Arunster

1

Tôi có nó làm việc tất cả các ngày dài sử dụng một trang JSP đơn giản và thư viện Java PDF Renderer (https://pdf-renderer.dev .java.net). Điều này làm việc vì Java in bằng cách sử dụng hệ điều hành và không phải là trình duyệt. Giả sử "in ấn thầm lặng" được coi là lỗ hổng/khai thác trình duyệt và được vá sau IE 6 để may mắn làm cho nó hoạt động thông qua Javascript hoặc Active X. Có thể nó có thể nhưng tôi không thể làm việc đó mà không có Java.

0

Tôi đang gặp vấn đề tương tự ở đây, đây là những gì tôi tìm hiểu cho đến nay.

A .: Bạn cần thiết lập IPP PrintServer

Bạn có nhiều triển khai máy chủ in mà bạn có thể thử.

  1. Máy chủ in phần cứng IPP: như DLINK DPR-1020 hoặc tương tự, một số máy in có chức năng này được cài sẵn.

  2. máy chủ Linux với CUPPS: máy chủ http://www.howtoforge.com/ipp_based_print_server_cups

  3. XP-Pro với ISS: http://www.michaelphipps.com/ipp-print-server-windows-xp-solution

B .: Bạn cần phải thực hiện WebApp bạn một khách hàng của Server IPP này để bạn pick- xử lý gửi yêu cầu in của mọi người dùng đến PrintServer.

PHP :: IN: IPP là một thư viện php bạn có thể thử (nó được kiểm tra kỹ trên các máy chủ tách).

5

Chúng tôi gặp khó khăn với một vấn đề tương tự. Chúng tôi cần in séc tới máy in séc, nhãn cho máy in nhãn và hóa đơn của khách hàng cho máy in hóa đơn cho cửa hàng bán lẻ embrasse-moi. Chúng tôi có máy tính giả, ngóc ngách, ipad, iphones không có khả năng in. Việc in ấn một tính năng hóa đơn về cơ bản là một bản in thầm lặng. Một bản pdf được ghi vào máy chủ và một tập lệnh shell được sử dụng cục bộ để lấy nó và in ra.

Chúng tôi sử dụng sau đây cho một giải pháp hoàn hảo với các thư viện tối thiểu:

  1. sử dụng TCPDF trong PHP để tạo ra PDF. Lưu trữ tệp PDF trên máy chủ. Đặt nó vào một thư mục 'In Hàng đợi'. Kudos cho TCPDF, hơi khó học, nhưng SICK SICK SICK. Lưu ý chúng tôi đang in 80 nhãn trên mỗi trang bằng cách sử dụng avery 5167 với mã vạch có độ chính xác hoàn hảo. Chúng tôi có hàng đợi in nhãn, kiểm tra và in hóa đơn. Các thư mục khác nhau về cơ bản cho các máy in khác nhau.

  2. Sử dụng tập lệnh hệ vỏ bao gồm để kết nối với máy chủ qua FTP, tải xuống PDF, xóa PDF khỏi máy chủ, gửi tệp PDF tới máy in và một lần nữa, xóa tệp PDF.

  3. Sử dụng máy tính cục bộ được gắn với máy in, chạy tập lệnh trong thiết bị đầu cuối. rõ ràng là sửa đổi máy in và đường dẫn của bạn.

  4. Bởi vì bạn luôn muốn điều này đang chạy và bởi vì bạn sử dụng MAC, hãy tạo 'ứng dụng' bằng cách sử dụng trình tự động. Bắt đầu tự động, đặt kịch bản trong một 'kịch bản shell chạy' và lưu. Sau đó, gắn ứng dụng đó vào một mục đăng nhập. Xem kịch bản bên dưới kịch bản lệnh shell nếu bạn muốn xem cửa sổ 'output' trên MAC.

BAM - công trình bị bệnh.

Đây là kịch bản shell

#!/bin/bash 

# Get a remote directory Folder 
# List the contents every second 
# Copy the files to a local folder 
# delete the file from server 
# send the file to a printer 
# delete the file 
# compliments of embrasse-moi.com 


clear    # clear terminal window 

echo "##########################################" 
echo "Embrasse-Moi's Remote Print Queue Script" 
echo "##########################################" 

#Local Print Queue Directory 
COPY_TO_DIRECTORY=/volumes/DATA/test/ 
echo "Local Directory: $COPY_TO_DIRECTORY" 
#Priter 
PRINTER='Brother_MFC_7820N' 
echo "Printer Name: $PRINTER" 

#FTP Info 
USER="user" 
PASS="pass" 
HOST="ftp.yourserver.com" 
#remote path 
COPY_REMOTE_DIRECTORY_FILES=/path 
echo "Remote Print Queue Directory: $HOST$COPY_REMOTE_DIRECTORY_FILES" 

echo 'Entering Repeating Loop' 
while true; do 

    #make the copy to directory if not exist 
    echo "Making Directory If it Does Not Exist" 
    mkdir -p $COPY_TO_DIRECTORY 
    cd $COPY_TO_DIRECTORY 

    ######################### WGET ATTEMPTS ############################################ 
    #NOTE wget will need to be installed 
    echo "NOT Using wget to retrieve remote files..." 

    # wget --tries=45 -o log --ftp-user=$USER --ftp-password=$PASS ftp://ftp.yourserver.com$COPY_REMOTE_DIRECTORY_FILES/*.pdf 

    ######################### FTP ATTEMPTS ############################################ 
    echo "NOT Using ftp to retrieve and delete remote files..." 
    #This seems to fail at mget, plus not sure how to delete file or loop through files 
    ftp -n $HOST <<END_SCRIPT 
    quote USER $USER 
    quote PASS $PASS 
    cd $COPY_REMOTE_DIRECTORY_FILES 
    ls 
    prompt 
    mget * 
    mdel * 
END_SCRIPT 


    echo "Examining Files in $COPY_TO_DIRECTORY" 
    for f in $COPY_TO_DIRECTORY/*.pdf 
    do 
     # take action on each file. $f store current file name  
     #print 
     echo "Printing File: $f To: $PRINTER" 
     lpr -P $PRINTER $f 

     # This will remove the file..... 
     echo "Deleting File: $f" 
     rm "$f" 
    done 
    echo "Script Complete... now repeat until killed..." 
    sleep 5 
done 

và kịch bản công cụ tự động nếu bạn muốn nhìn thấy đầu ra, giữ cho các ứng dụng với các kịch bản chọn một lựa chọn kịch bản chạy táo:

on run {input, parameters} 

    tell application "Finder" to get folder of (path to me) as Unicode text 
    set workingDir to POSIX path of result 
    tell application "Terminal" 
      do script "sh " & "'" & workingDir & "script1.sh" & "'" 

    end tell 

    return input 
end run 
0

Bạn nên hãy xem PrintNode. Họ cung cấp một dịch vụ in ấn từ xa im lặng cho các ứng dụng web. Bạn cài đặt một phần mềm trên máy tính để bàn đồng bộ hóa với máy chủ của họ. Sau đó bạn có thể gửi printjobs bằng cách sử dụng một yêu cầu json và chúng ngay lập tức được in ra.

4

Như @Axel đã viết, Firefox có tùy chọn print.always_print_silent.

Đối với Chrome, sử dụng tùy chọn --kiosk-printing để bỏ qua hộp thoại Print Preview:

Chỉnh sửa các phím tắt bạn sử dụng để bắt đầu Chrome và thêm "--kiosk-in", sau đó khởi động lại Chrome.

Lưu ý: Nếu nó không hoạt động, rất có thể là do bạn không hoàn toàn dừng Chrome, việc đăng xuất và đăng nhập lại chắc chắn sẽ thực hiện thủ thuật.

+0

bạn phải chắc chắn rằng tất cả các quá trình chrome bị giết (hangouts, vv ..) Điều này luôn luôn vấp tôi khi tôi không thể tìm ra lý do tại sao cờ khởi động của tôi đã không được công nhận. '--disable-print-preview' là một cách khác để bỏ qua cửa sổ xem trước chrome và nhận các tùy chọn hộp thoại in hệ thống mặc định theo mặc định. – timbrown

+0

Nhà phát triển.chrome.com/extensions/printerProvider có cung cấp giải pháp để in âm thầm trong chrome không? – mmu36478

1

Tôi biết đây là một chủ đề cũ hơn, nhưng nó vẫn là tìm kiếm hàng đầu của Google cho 'in ấn thầm lặng' vì vậy tôi sẽ thêm những phát hiện của mình vì lợi ích của bất kỳ ai gặp phải điều này ngay bây giờ.

Chúng tôi đã gặp sự cố tương tự với in các loại nhãn khác nhau cho các máy in khác nhau cho một hệ thống cổ phiếu. Phải mất một số thử nghiệm và lỗi, nhưng chúng tôi đã nhận được xung quanh nó bằng cách có hệ thống tạo ra một pdf của các nhãn, với tên máy in và trang qty được mã hóa trong pdf. Tất cả những gì bạn phải làm là: TRÊN IE, vào Tùy chọn Internet >> Bảo mật >> Trang web đáng tin cậy >> Trang web Xóa 'Yêu cầu xác minh máy chủ (https :) cho tất cả các trang web trong khu vực này' thêm "http://[yoururl]" và pdf sẽ tự động in ra.

Khi chúng tôi thiết lập ban đầu, chúng tôi đã sử dụng Chrome làm trình duyệt mặc định, nhưng trong tháng 9 năm 2015, Chrome đã giảm khả năng chạy plugin NPAPI. Điều này có nghĩa là bạn không còn có thể chọn plugin Adobe pdf làm trình xử lý pdf mặc định và plugin pdf được tích hợp sẵn không xử lý in ấn im lặng :-( Nó vẫn hoạt động trong Internet Explorer (IE11 tại thời điểm viết) nhưng tôi ' đã không cố gắng nào các trình duyệt khác.

HTH Chúc mừng, Nige

Các vấn đề liên quan