2014-07-08 16 views
7

này có phần tương tự như câu hỏi về Is there a better way to get the page count from a PrintDocument than this?Nhận số trang in mà không in tài liệu

Nhưng trong trường hợp của tôi, tôi có một điều khiển trình duyệt web với định dạng html. Tại thời điểm này tôi có tùy chọn gọi ShowPrintPreviewDialog() để người dùng có thể xem có bao nhiêu trang sẽ được in.

Có cách nào để không có số trang sẽ được in mà không cần khởi chạy PrintPreview?

Tôi đang cố gắng tạo phương thức sẽ gọi số OnTextChange và tự động hiển thị số lần in trang?

Tôi có sử dụng PrintPage kiện

private void PrintDocumentOnPrintPage(object sender, PrintPageEventArgs e) 
{ 
    e.Graphics.DrawString(this.webBrowser1.DocumentText, this.webBrowser1.Font, Brushes.Black, 10, 25);    
} 
+0

Tôi nghĩ bạn có câu trả lời trong [câu trả lời cho câu hỏi được liên kết] (http://stackoverflow.com/a/11456713/1552016): đó là phương pháp tĩnh mà bạn có thể gọi trong trình xử lý sự kiện thay đổi văn bản và sẽ không hiển thị bất kỳ hộp thoại nào cả. – qqbenq

+0

@qqbenq: nếu sử dụng 'StandardPrintController' nó hoạt động tốt nhưng không phải là' PreviewPrintController', Vì vậy, câu trả lời không giúp được –

Trả lời

10

Tin xấu luôn đi chậm tại SO. Bạn sẽ cần phải làm xước ý tưởng rằng điều này là thực tế.

Mặc dù không được nêu trong câu hỏi, bạn đã biết rằng trình xử lý sự kiện PrintPage của bạn không hoạt động. Nó luôn tạo ra số lượng 1. Đó là vì bạn không bao giờ đặt thuộc tính e.HasMorePages thành true, thuộc tính gây ra nhiều hơn một trang được tạo.

Để đáng tin cậy đặt thuộc tính đó thành true, bạn cần tìm hiểu chính xác cách HTML được hiển thị bởi công cụ bố cục trình duyệt. Và tìm ra chính xác cách chia nhỏ nó thành các trang không cắt, một dòng văn bản hoặc một hình ảnh trong hai trang. Và tìm hiểu làm thế nào để điều này là trong chính xác cùng một cách mà các công cụ in ấn trình duyệt thực hiện điều này. Một chiến công đã được cố gắng bởi nhiều lập trình viên, hoàn thành bởi không ai. Mô hình đối tượng tự động hóa của trình duyệt chỉ không có api cần thiết.

Cách hợp lý duy nhất là cách bạn đã biết. Bạn để gọi ShowPrintPreviewDialog(). Mà dễ dàng hiển thị số trang trong hộp thoại xem trước, trông như thế này trong IE11:

enter image description here

Trong trường hợp bạn muốn xem xét snooping rằng số tắt hộp thoại: không có, mà không thể làm việc một trong hai. Hộp thoại không sử dụng bất kỳ điều khiển nào, đó là một cửa sổ nguyên khối.

+0

Xin chào, nơi tôi thực sự đặt 'e.NewPage'. Tôi không thể tìm thấy tài sản tương tự? –

+0

Đó là một lỗi đánh máy, sửa chữa. Hãy cố gắng mò mẫm điểm của câu trả lời, bạn không có cơ hội để đặt nó một cách chính xác. –

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