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.
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
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