2011-09-18 38 views
6

tôi cố gắng để in ra nội dung của biên tập viên của tôi:trang cấp-Vấn đề ở In tài liệu

PrintDialog pd = new PrintDialog(); 

pd.PageRangeSelection = PageRangeSelection.AllPages; 
pd.UserPageRangeEnabled = true; 

FlowDocument fd = DocumentPrinter.CreateFlowDocumentForEditor(CurrentDocument.Editor); 
DocumentPaginator dp = ((IDocumentPaginatorSource)fd).DocumentPaginator; 

bool? res = pd.ShowDialog(); 

if (res.HasValue && res.Value) 
{ 
    fd.PageHeight = pd.PrintableAreaHeight; 
    fd.PageWidth = pd.PrintableAreaWidth; 
    fd.PagePadding = new Thickness(50); 
    fd.ColumnGap = 0; 
    fd.ColumnWidth = pd.PrintableAreaWidth; 

    pd.PrintDocument(dp, CurrentDocument.Editor.FileName); 
} 

Các thử nghiệm tài liệu tôi đã từng có khoảng 14 trang (với điều này pagesize-settings). tôi đã thử nghiệm nó: printdialog xuất hiện và tôi đã chọn một pagerange (tôi gõ "1-3" vào hộp văn bản) và nhấp print. phía trên printdocument() Tôi đặt điểm ngắt và nhìn vào đối tượng printdialog. nó nói pd.PageRangeSelection = PageRangeSelection.UserPagepd.PageRange = {1-3}. Tôi đoán điều này là đúng, bởi vì tôi chỉ muốn in trang 1-3. sau đó thực hiện printdocument() và trong đầu ra-pdf (để kiểm tra tôi sử dụng máy in pdf) có 14 trang (toàn bộ tài liệu được in).

sai lầm của tôi ở đâu? tại sao cài đặt pagerange không hoạt động?

nhờ sự giúp đỡ của bạn

Trả lời

0

Trong mã của bạn, bạn tự đặt:

pd.PageRangeSelection = PageRangeSelection.AllPages; 

Đây là tại sao mã bản in của bạn tất cả các trang.

+0

đây không phải là lý do. tôi đã nói rằng tôi đã gỡ lỗi nó và PageRangeSelection-Property được đặt thành UserPages trước khi PrintDocument() - Phương thức được thi hành – 0xDEADBEEF

1

Lý do là vì FlowDocument 's DocumentPaginator không xử lý UserPageRange s. Bạn có thể thấy rằng triển khai FlowDocument tạo ra một FlowDocumentPaginator và không tính đến phạm vi tài khoản.

Nếu nó đã xử lý nó, trong FlowDocumentPaginator.(Async)GetPage bạn sẽ thấy, kiểm tra mã để xem trang được yêu cầu in có nằm trong chỉ mục các trang có sẵn hay không; hoặc có thể nếu một khóa tồn tại trong một Dictionary có giá trị là DocumentPage để in.

Nói cách khác, và lý do mặc định PrintDialog đã UserPageRangeEnabled thiết lập để false, là bởi vì để sử dụng tính năng này, bạn thường sẽ phải viết riêng DocumentPaginator của bạn hoặc bạn có thêm một số logic để biên dịch một mới tài liệu tạm thời để chỉ giữ các trang bạn muốn in.

Vui lòng đặt bất kỳ câu hỏi nào.

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