2012-03-12 49 views
6

Xem xét trang HTML tĩnh là test.html và phiên bản có thể in của trang đã được lưu trữ trong test.pdf. Làm cách nào để hướng dẫn trình duyệt tải và in test.pdf thay vì test.html khi khách truy cập cho biết trình duyệt của họ để in?Làm cách nào để buộc trình duyệt in phiên bản PDF của trang web?

Nếu không thể làm thế nào tôi có thể giới thiệu một nút in (sử dụng JavaScript) trong trang HTML để làm như vậy?

+0

Bạn có thể thực hiện việc này thông qua PHP. Không phải JS. http://webdesign.about.com/od/php/ht/force_download.htm Trong JS, bạn đã gửi các tiêu đề tập tin, vì vậy bạn không thể làm những thứ kỳ lạ như thế này. – Manishearth

+1

1. Thao tác này sẽ tải xuống tệp, không in; 2. Ngay cả khi tải pdf, nó sẽ mở nó không in. – Googlebot

+0

Rất tiếc, tôi đã đọc sai câu hỏi. Một thứ có thể hoạt động (dunno) đang tải bản pdf trong khung nội tuyến và gọi in của iframe. Nhưng tôi không chắc chắn bao nhiêu DOM được bảo tồn. – Manishearth

Trả lời

8

Bạn không thể buộc trình duyệt in tệp khác với người dùng đang yêu cầu/đang xem. Đó sẽ là một cơn ác mộng an ninh!

Phương án 1 (JS (theo yêu cầu) & HTML)

tôi khuyên bạn nên tạo một liên kết printable version trên trang web của bạn mà sẽ trực tiếp người dùng đến .pdf (mở PDF trong một cửa sổ mới sẽ thích hợp hơn).

<!-- JS --> 
<script type="text/javascript"> 
    function LoadPrintableVersion() { 
     window.open("Test.pdf"); 
    } 
</script> 

<!-- HTML --> 
<span id="spanPrintableVersion" onclick="LoadPrintableVersion()"> 
    Printable Version 
</span> 

Lựa chọn 2 (html tinh khiết)

<a href="test.pdf" target="_blank">Printable Version</a> 
+1

Tại sao không chỉ liên kết đến tệp PDF bằng thẻ ''? Sau đó, nó cũng sẽ hoạt động mà không cần JS. – David

+3

@David, bởi vì người dùng đặc biệt yêu cầu JS và tôi đang ở trong hộp JS của tôi :) Tôi sẽ cung cấp một ví dụ html thuần túy (vì điểm của bạn là hợp lệ)! –

+0

Vui lòng giải thích cách gửi tài liệu khác cho máy in là "cơn ác mộng về bảo mật"? – Supuhstar

3

Bạn không thể chiếm quyền điều khiển các lệnh in trong trình duyệt, nhưng bạn có thể chiếm quyền điều khiển các phím tắt (mặc dù tôi không muốn giới thiệu nó) để khi người dùng in bằng cách sử dụng ctrl/cmd + p, nó chuyển hướng đến một tệp PDF (hoặc thực hiện điều gì đó khác). Tuy nhiên, đây là một bãi chứa khả năng sử dụng, có lẽ bạn chỉ cần tạo một liên kết lớn có nội dung "Bản in được" và liên kết nó với tệp PDF (hoặc phiên bản của trang sử dụng CSS thân thiện với bản in).

Một lựa chọn tốt khác là chỉ cần xác định một số quy tắc cho loại phương tiện print trong tệp CSS của bạn, sau đó trình duyệt sẽ áp dụng những điều đó khi người dùng in, không có bất kỳ hack hoặc javascript nào cả.

Nhưng kể từ khi bạn hỏi tôi đã tạo một tập lệnh chặn nhỏ phím tắt cho lệnh in. Đó là loại khó khăn vì các phím lệnh mac, nhưng cái gì đó như:

var cmd = false; 

$(document).on('keydown', function(e) { 

    if(detectMacCommand(e.which)) { 
     cmd = true; 
     return; 
    } 

    // now detect print (ctr/cmd + p) 
    if (e.which == 80 && (e.ctrl || cmd)) { 
     e.preventDefault(); 
     alert('redirect to PDF'); 
    } 

}).on('keyup', function(e) { 

    if(detectMacCommand(e.which)) { 
     cmd = false; 
     return; 
    } 

}); 

function detectMacCommand(key) { 
    return ($.browser.mozilla && key == 224 || 
      $.browser.opera && key == 17 || 
      $.browser.webkit && (key == 91 || key == 93)); 
} 
​ 

Đó là khá mát mẻ, nhưng không sử dụng nó :)

2

Dưới đây là cách W3C nói rằng bạn nên:

<LINK REL="alternate" HREF="/path/to/PDFVersion.pdf" TYPE="application/pdf" MEDIA="print" TITLE="PDF version" /> 

Tâm trí bạn, như xa như tôi có thể nói, không trình duyệt hiện hỗ trợ này. Lấy làm tiếc.

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