2011-06-13 27 views
6

Vì vậy ... từ những gì tôi có thể tìm thấy trên Google, tôi không thể tìm cách sử dụng Javascript để đặt tùy chọn in của mình (đọc: lề, hướng, chân trang, v.v.).Đặt tùy chọn in từ JS

Tôi sắp nói với ông chủ của tôi rằng những gì anh ấy muốn làm là không thể. Tôi muốn kiểm tra bạn sẽ tốt folks priors để làm điều này. Làm ơn cho tôi biết.

Tôi thấy rằng trong FF bạn có thể sử dụng một số cài đặt user_pref (khóa, val) để thiết lập tùy chọn của người dùng, nhưng điều đó không hoạt động trên 90% người dùng của tôi. Tôi đang tìm kiếm một cái gì đó sẽ bao gồm của IE (càng nhiều càng tốt), FF và Chrome.

Cảm ơn bạn đã trả lời câu hỏi của ninja.

+1

Tôi không phải là một ninja web bởi bất kỳ trí tưởng tượng nào và nó cũng không phải là giải pháp JS, nhưng đó không phải là bản định dạng in trong CSS có nghĩa vụ phải thực hiện trong số những thứ khác? –

+1

Thêm vào Timo, hãy kiểm tra điều này để biết ví dụ về truy vấn phương tiện in cho http://www.javascriptkit.com/dhtmltutors/cssmedia.shtml css Về cơ bản, tạo một biểu định kiểu khác và cho phép bạn thay đổi hoàn toàn giao diện của phiên bản in của trang. Ví dụ, tôi đã thường phải thiết lập màu nền cơ thể để #fff để có được một bản in để sử dụng mực ít hơn và, tốt, nhìn tốt hơn. – mrk

+0

Thực tế là có thể thiết lập các thuộc tính in qua JavaScript bằng cách sử dụng tiện ích http://jsprintsetup.mozdev.org/ Trân trọng này. –

Trả lời

11

Vì vậy ... sau cả ngày tìm kiếm, tôi nghĩ rằng tôi đã tìm thấy câu trả lời cho câu hỏi của riêng mình. Tóm lại, câu trả lời là JS và/hoặc CSS sẽ không cho phép bạn ghi đè lên thiết lập trang mặc định của trình duyệt của khách hàng.

Đây là những gì tôi đã thử. Nếu bạn tạo một tệp HTML đơn giản và đầu trống, và một nội dung chỉ chứa văn bản "Kiểm tra", bạn sẽ có thể thấy những gì tôi đã thử nghiệm.

  1. Bản định kiểu in không thể giải quyết được sự cố của bạn. Đặt lề trên thân thành 0px 0px 0px 0px không giống với cách bấm Tệp> Thiết lập Trang và đặt tất cả lề của bạn thành 0. Mặc dù Print Style Sheeters muốn bạn tin gì, chúng khác nhau. Hãy thử nó cho chính mình. Đây là lý do tại sao Print Style Sheets không giải quyết được vấn đề của bạn.

  2. JS không thể giải quyết được sự cố của bạn. Bạn có thể hình ảnh nếu mỗi trang mà bạn truy cập đã sửa đổi các thuộc tính JS cục bộ của bạn không? Để cho phép mỗi trang có quyền truy cập vào các thiết lập in cục bộ của bạn sẽ là vi phạm bảo mật và không được phép. Bởi vì điều này, JS không thể giải quyết vấn đề của bạn.

Tôi rất muốn có ai đó phản hồi tại đây và cho tôi biết rằng tôi đã sai. Nếu không ... điều này thật tệ ... và nó cần phải xảy ra. Tôi có một tấn người dùng cũ ... và khiến họ đặt lề trong thiết lập trang của họ là một nỗi đau. Ngoài ra, khách hàng không muốn chúng tôi tái cấu trúc trang để họ không cần. Tôi đang ở giữa một tảng đá và một chỗ cứng.

6

Bạn có thể thiết lập định hướng trang và lề với CSS:

@page { 
    size: landscape; 
    margin: 10% 
} 

Bạn cũng có thể đặt một chân ở cuối mỗi trang bằng cách sử dụng các yếu tố <tfoot>.

EDIT: Như được chỉ ra bởi Beejamin, đây là nhà nửa chiều. Bạn thực sự không thể thay đổi tùy chọn máy in (những tùy chọn xuất hiện trong Hộp thoại In khi nhấp vào In). Ngoài ra, IE đang thiếu hỗ trợ cho bộ chọn @page, (đã xem xét để xem liệu IE9 có hỗ trợ nó và không thể tìm thấy bất kỳ thứ gì). Thay vào đó, bạn luôn có thể thử áp dụng nó cho cơ thể trong bản định kiểu in của bạn.

body { 
    size: landscape; 
    margin: 10% 
} 

Mặc dù đầu tôi không chắc chắn về hiệu quả của việc này.

+1

Jaitsu, trang @ làm gì? Tôi không thể tìm thấy bất kỳ tài liệu css nào trên @page ... và tất cả các kiểu mà tôi cố gắng áp dụng cho nó không hoạt động. – frosty

+1

@page là yếu tố trang cho phương tiện truyền thông paged (đó là máy in chỉ, AFAIK) - hỗ trợ cho nó không phải là tuyệt vời - nó chắc chắn sẽ không làm việc trong bất kỳ IE tôi biết (không biết về 9). Nó được thiết kế cho loại điều này, nhưng vẫn sẽ không cho phép bạn điều chỉnh cài đặt * của * máy in - chỉ lề/đệm của trang 'hộp' được gửi tới máy in (và các lề của máy in được thêm vào). – Beejamin

+1

Rất tiếc - có nghĩa là bao gồm liên kết: http://www.w3.org/TR/CSS2/page.html thật khó để tìm kiếm, vì google đã bỏ dấu '@'. – Beejamin

3

Tôi nghĩ bạn đang khá may mắn khi thử làm điều này trong HTML và CSS. Một phần lớn của vấn đề là biên lợi nhuận máy in là tất cả các loại máy in: Hầu hết các máy in có một lề tối thiểu mà họ có thể thiết lập (tương đương với không gian họ cần để nắm trang, và chuyển động trái/phải của đầu.

Lề được chấp nhận cũng sẽ khác nhau tùy theo kích thước giấy (lề thường có thể nhỏ hơn trên một trang giấy nhỏ hơn mức tối đa máy in sẽ chấp nhận). Ví dụ, nếu bạn nạp giấy A5 vào máy in A4, các lề bạn có thể đặt sẽ khác so với khi bạn nạp A4.

Không có thông tin nào có sẵn cho trang web, qua CSS, javascript hoặc bất kỳ thứ gì.

Bây giờ, theo như giải pháp, tệp PDF cho phép bạn nhúng một số cài đặt mặc định của máy in trong tệp - Acrobat pro sẽ cho phép bạn chỉ định tùy chọn chia tỷ lệ, số bản sao mặc định, v.v. cá cược rằng có nhiều cài đặt tiềm năng có sẵn ở định dạng tệp mà Acrobat không hiển thị.

Có rất nhiều công cụ tạo PDF đầy đủ tính năng cho bất kỳ công nghệ phía máy chủ nào bạn sử dụng. những cái tốt thậm chí sẽ cho phép bạn cung cấp một URL và hiển thị HTML + CSS thành nội dung PDF - điều đó sẽ tự động hóa thế hệ ở một mức độ nào đó. PDF thế hệ là khá CPU mặc dù, và nó sẽ không được liền mạch cho người sử dụng, hoặc (và sẽ yêu cầu PDF plugin cho hầu hết các trình duyệt).

Tôi biết nó không lý tưởng, nhưng đó là con đường mà tôi sẽ xem xét. Chúc may mắn!

1

Sử dụng CSS sẽ giúp bạn đạt được điều đó.

@page { 
    margin:0cm; 
} 
Các vấn đề liên quan