2011-11-22 44 views
8

Tôi có một hệ thống .Window.Controls.PrintDialog và tôi muốn in các trang có chế độ ngang và chế độ dọc bằng một PrintTicket duy nhất nhưng có vẻ như tôi chỉ có thể đặt hướng một lần.PrintDialog với các trang ngang và dọc

Miễn là tôi muốn in trên giấy, đây có thể không phải là vấn đề lớn nhưng tôi muốn in/tạo tài liệu PDF từ Printjob của tôi. Ở đó tôi cần các trang có chế độ Landscape và Portrait trong tài liệu onc.

Cho đến nay tôi đã xoay vòng các trang ngang 90 độ và hoạt động tốt nhưng trong PrintPreview nó trông rất lạ vì nội dung được xoay.

+1

Bạn đã bao giờ tìm cách thực hiện việc này chưa? Tôi muốn có thể làm điều đó vì nhiều lý do tương tự (in sang PDF với các trang dọc/ngang) và không tìm ra cách để nó hoạt động. – markmuetz

+1

Không phải là câu trả lời, nhưng cũng làm việc trong một dự án khi cần thiết. Sau nhiều ngày nghiên cứu, tôi đã kết thúc giống như bạn. Tuy nhiên, một tài liệu XPS có khả năng định hướng giấy chính xác (như đã thấy khi xuất từ ​​MS Word sang XPS). Vẫn đang chờ xem làm thế nào nó được thực hiện. – NestorArturo

Trả lời

1

Không sạch như bạn muốn và nhiều giải pháp khác nhưng tôi nghĩ rằng nó có thể đạt được mục tiêu của bạn. Bạn có thể sử dụng thư viện iTextSharp để nối các tệp PDF vào một trong nhiều tác vụ in sau đây. Đây là một số sample code.

Hy vọng rằng ai đó sẽ đưa ra giải pháp chuyển tiếp thẳng hơn.

1

Một thời gian dài sau đó ...

Bạn có thể làm điều này bằng cách cung cấp một EventHandler mà được gọi là, yêu cầu cho một PrintTicket tùy chỉnh, trước mỗi trang được in ra. PageViewModel tại đây có hiệu quả bao gồm

PageViewModel{ 
    Page Page {get;set;} 
    PageOrientation? PageOrientation {get;set} 
} 

if (PrintDialog.ShowDialog() == true) 
    { 
    XpsDocumentWriter xpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(PrintDialog.PrintQueue); 
    xpsDocumentWriter.WritingPrintTicketRequired += (s, e) => 
    { 
     PageViewModel pVM = publicationVM.Pages[e.Sequence - 1]; 
     if (pVM.Orientation != null && pVM.Orientation != publicationVM.Orientation) 
     { 
     e.CurrentPrintTicket = new PrintTicket(); 
     e.CurrentPrintTicket.PageOrientation = PageOrientation.Portrait; 
     } 
    }; 
    VisualsToXpsDocument visualsToXpsDocument = (VisualsToXpsDocument) xpsDocumentWriter.CreateVisualsCollator(PrintDialog.PrintTicket, PrintDialog.PrintTicket); 
    visualsToXpsDocument.BeginBatchWrite(); 
    Page page; 
    foreach (PageViewModel pVM in publicationVM.Pages) 
    { 
     page = pVM.Page; 
     visualsToXpsDocument.Write(page); 
    } 
    visualsToXpsDocument.EndBatchWrite(); 
    } 

và bingo! hỗn hợp chân dung và phong cảnh. Duplexing này cũng tốt.

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