2009-06-03 45 views
11

Đồng nghiệp và tôi đã thảo luận về những gì không thể thực hiện được trong trình duyệt.Tự động in hình ảnh từ trang web

Sau đó, một câu hỏi đặt ra là cả hai chúng tôi đều không thể trả lời chắc chắn.

Bạn có thể tạo một trang web như vậy khi bạn điều hướng đến trang web, nó tham gia vào máy in phía máy khách và cố gắng in tài liệu. Ví dụ, bất cứ khi nào bạn truy cập vào trang web cá nhân của tôi, bạn sẽ được xử lý để in một bức tranh của tôi, mỉm cười.

Bây giờ, đây là một ý tưởng ghê gớm. Tôi biết. Nhưng cuộc thảo luận hấp dẫn tôi như thế nào nếu nó có thể được thực hiện, và làm thế nào. Bạn tôi khăng khăng rằng điều tốt nhất bạn có thể làm là bật hộp thoại in cho người dùng, họ sẽ phải tự in.

Bạn có thể bỏ qua bước này không? Hoặc chỉ là một số kịch bản ưa thích để di chuyển chuột qua nút in và nhấp vào nó? Hoặc sử dụng điều khiển activeX để giao diện trực tiếp với một API Máy in?

+1

Bạn có thể gửi bản in mà không hiển thị hộp thoại in. Thật không may, điều này chỉ có thể cho IE. Hy vọng điều này sẽ giúp một chút: http://stackoverflow.com/questions/1096862/print-directly-from-browser-without-print-popup-window –

Trả lời

5

Bạn phải nhắc người dùng in trang hiện tại, không có cách nào bỏ qua bước này (có thể trong activeX dành cho IE). Điều đó nói rằng, có hai cách khác nhau bạn có thể nhắc người dùng in hình ảnh của bạn mỉm cười khi trang được tải.

Đây là cách thực hiện trong JavaScript.

window.onload = function() { 
    var img = window.open("me-smiling.png"); 
    img.print(); 
} 

Và dưới đây là cách để làm điều đó trong css/javascript/html (giả hình ảnh của bạn có id 'tôi-mỉm cười'): CSS:

@media print { 
    * { 
    display:none; 
    } 
    img#me-smiling { 
    display:block; 
    } 
} 

Javascript:

window.onload = function() { window.print() } 
+1

Có cách nào để nó phải có hai ngón cái không? – DevinB

+10

Không, trình duyệt không hỗ trợ in ảnh của hai ngón tay cái lên (IE hỗ trợ một ngón tay cái lên) – tj111

1

Bạn không thể bỏ qua hộp thoại in, theo như tôi biết. Đó sẽ là một lỗ hổng bảo mật khá rõ ràng nếu trình duyệt cho phép điều đó. Nhưng bạn có thể mở hộp thoại in bằng "window.print()".

+3

Chỉ vì nó 'sẽ' là một lỗ hổng bảo mật, không có nghĩa là nó không phải là một lỗ hổng bảo mật. – DevinB

+0

Tôi đã bắt gặp yêu cầu này trước đây. Nó đã được in tự động các đơn đặt hàng thực phẩm trong một dịch vụ giao hàng thực phẩm nóng từ đơn đặt hàng trực tuyến. Họ chỉ muốn lệnh xuất hiện trên giấy và không phải được thừa nhận. Phạm vi mới của "máy in trên đám mây" mà tôi thấy gần đây cũng cung cấp cơ sở kinh doanh này, nhưng bỏ qua trình duyệt. – Jason

1

Tôi nghĩ rằng tốt nhất bạn sẽ cần một thành phần ActiveX bằng cách sử dụng API cửa sổ cơ sở để lấy bối cảnh thiết bị cho máy in mặc định và thử in một hình ảnh được nhúng bằng cách sử dụng các giá trị giả định cho cài đặt máy in.

4

AttendStar đã tạo một tiện ích bổ sung miễn phí để chặn hộp thoại và xóa tất cả đầu trang và chân trang cho hầu hết các phiên bản của Firefox. .

https://addons.mozilla.org/en-US/firefox/addon/attendprint/

Với tính năng trên bạn có thể sử dụng $ ('img') jqprint(); và jqprint cho jquery sẽ chỉ in hình ảnh đó được tự động gọi từ ứng dụng web của bạn.

+0

Không chỉ thực sự thú vị, nó cho thấy rằng thực sự có một trường hợp kinh doanh cho những gì tôi đã hỏi. Một cái gì đó mà tôi không có ý tưởng về thời điểm đó. – DevinB

1

Để in đến máy in mặc định tự động mà không thấy một dấu nhắc hộp thoại in, tôi đã chia sẻ một số mã trong những câu dưới đây mà làm việc trong IE7, IE8 và IE9:

Bypass Printdialog in IE9

6

Giải pháp duy nhất để tránh hộp thoại in mà tôi tìm thấy đang tạo một biến trên Mozilla Firefox để đặt tự động in.Có lẽ không phải là giải pháp tốt nhất nếu bạn cần sử dụng trình duyệt khác, nhưng trong trường hợp của tôi, tôi chỉ cần in báo cáo tự động và hoạt động:

1- Mở Firefox và nhập "about: config" vào thanh địa chỉ
2- Nhấp chuột phải vào bất kỳ tùy chọn nào và chọn "Mới"> "Boolean"
3- Thêm biến có tên "print.always_print_silent" với giá trị "true"
4- Khởi động lại Firefox.

Hy vọng sẽ giúp bạn!

+0

Điều này đã hiệu quả. Cảm ơn. :-) –

1

Theo như tôi biết, không có cách nào để in tài liệu trực tiếp, mà không có sự can thiệp của khách hàng, chẳng hạn như đặt cờ trình duyệt. Trong dự án hiện tại của chúng tôi, chúng tôi cần in trực tiếp tới máy in mặc định, nhưng ít nhất với Chrome, bạn có thể thực hiện dễ dàng với các đối số khởi động bổ sung.

Để in trực tiếp đến máy in mặc định hệ điều hành bạn có thể sử dụng:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --kiosk-printing http://www.contoso.com

Một tùy chọn khác, mà cũng có thể có ích, là tos sử dụng hộp thoại in gốc thay vì xem trước Chromes in.

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --disable-print-preview http://www.contoso.com

Lưu ý, rằng window.print() và/hoặc Ctrl-P cư xử phù hợp các thiết lập đề cập.

Tôi biết, điều này không trả lời chính xác câu hỏi OP, nhưng tôi nghĩ nó có liên quan một chút và đối với các ứng dụng doanh nghiệp dựa trên web, đây là trường hợp sử dụng khá phổ biến. Có thể ai đó thấy nó hữu ích.

Đối với Firefox Tôi khuyên bạn nên Seamless Print Addon

0

Từ rất nhiều tìm kiếm từ vài ngày qua, Tôi đã tìm thấy một giải pháp tốt nhất có thể. Cho đến ngày Chrome không hỗ trợ in trực tiếp từ javascript. Nó đã khởi chạy USB và API nối tiếp có thể giúp ích.

Nhưng hiện tại tôi đang sử dụng giải pháp JavaApplet là nguồn mở. https://github.com/qzind/qz-print - xây dựng Trong khi tôi gặp lỗi khi tạo tòa nhà. Tôi thích một Plugin In sẵn sẵn - QZ In 1.9.3 ứng dụng dành cho máy tính để bàn, hoạt động tuyệt vời.

Tải về từ đây: https://qz.io/download/

Mã số Ví dụ:

/*************************************************************************** 
* Prototype function for printing an HTML screenshot of the existing page 
* Usage: (identical to appendImage(), but uses html2canvas for png rendering) 
* qz.setPaperSize("8.5in", "11.0in"); // US Letter 
* qz.setAutoSize(true); 
* qz.appendImage($("canvas")[0].toDataURL('image/png')); 
***************************************************************************/ 
function printHTML5Page() { 
    $("#qz-status").html2canvas({ 
     canvas: hidden_screenshot, 
     onrendered: function() { 
      if (notReady()) { return; } 
      // Optional, set up custom page size. These only work for PostScript printing. 
      // setPaperSize() must be called before setAutoSize(), setOrientation(), etc. 
      qz.setPaperSize("8.5in", "11.0in"); // US Letter 
      qz.setAutoSize(true); 
      qz.appendImage($("canvas")[0].toDataURL('image/png')); 

      //qz.setCopies(3); 
      qz.setCopies(parseInt(document.getElementById("copies").value)); 

      // Automatically gets called when "qz.appendFile()" is finished. 
      window['qzDoneAppending'] = function() { 
       // Tell the applet to print. 
       qz.printPS(); 

       // Remove reference to this function 
       window['qzDoneAppending'] = null; 
      }; 
     } 
    }); 
} 

Toàn bộ ví dụ có thể được tìm thấy ở đây: https://gist.github.com/bkrajendra/c80de17b627e59287f7c

0

Đây là giải pháp tốt nhất mà tôi đã tìm thấy cho firefox: Có tiện ích bổ sung tuyệt vời này Seamless Print.

Nó hoạt động như sự quyến rũ.

+0

Không phải là câu trả lời lý tưởng. Vui lòng đọc nguyên tắc trả lời tại https://stackoverflow.com/help/how-to-answer –

+0

Cảm ơn @AmitP. Tôi sẽ cải thiện. – Josiah

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