2009-06-16 4 views

답변

10

내 DocumentViewer의 인쇄 대화 상자에서 방향을 설정하는 방법은 템플릿에서 단추를 생략하여 DocumentViewer 컨트롤의 인쇄 단추를 숨기는 것입니다. 그때 나는 내 자신의 인쇄 버튼을 제공하고 다음 코드로 묶여 :

public bool Print() 
    { 
     PrintDialog dialog = new PrintDialog(); 
     dialog.PrintQueue = LocalPrintServer.GetDefaultPrintQueue(); 
     dialog.PrintTicket = dialog.PrintQueue.DefaultPrintTicket; 
     dialog.PrintTicket.PageOrientation = PageOrientation.Landscape; 

     if (dialog.ShowDialog() == true) 
     { 
      XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(dialog.PrintQueue); 
      writer.WriteAsync(_DocumentViewer.Document as FixedDocument, dialog.PrintTicket); 
      return true; 
     } 

     return false; 
    } 
15

Mike's answer 작품. 필자가 구현하기로 선택한 방식은 DocumentViewer에서 파생 된 자체 문서 뷰어를 만드는 것이 었습니다. 또한 FixedDocument에 Document 속성을 캐스팅하지 못했습니다. FixedDocumentSequence로 캐스팅되었습니다.

GetDesiredPageOrientation은 필요한 모든 것입니다. 제 경우에는 첫 페이지의 치수를 검사합니다. 왜냐하면 문서의 모든 페이지에 대해 일정한 크기와 방향의 문서를 생성하고 시퀀스의 한 문서 만 생성하기 때문입니다.

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Windows.Controls; 
using System.Windows.Xps; 
using System.Printing; 
using System.Windows.Documents; 

public class MyDocumentViewer : DocumentViewer 
{ 
    protected override void OnPrintCommand() 
    { 
     // get a print dialog, defaulted to default printer and default printer's preferences. 
     PrintDialog printDialog = new PrintDialog(); 
     printDialog.PrintQueue = LocalPrintServer.GetDefaultPrintQueue(); 
     printDialog.PrintTicket = printDialog.PrintQueue.DefaultPrintTicket; 

     // get a reference to the FixedDocumentSequence for the viewer. 
     FixedDocumentSequence docSeq = this.Document as FixedDocumentSequence; 

     // set the default page orientation based on the desired output. 
     printDialog.PrintTicket.PageOrientation = GetDesiredPageOrientation(docSeq); 

     if (printDialog.ShowDialog() == true) 
     { 
      // set the print ticket for the document sequence and write it to the printer. 
      docSeq.PrintTicket = printDialog.PrintTicket; 

      XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printDialog.PrintQueue); 
      writer.WriteAsync(docSeq, printDialog.PrintTicket); 
     } 
    } 
} 
+0

기본 문서 뷰어는 이미 1800에 친숙하지 않은 텍스트가 포함되어 있기 때문에 이미 기본 문서 뷰어를 덮어 썼습니다. 따라서이 문서는 훌륭한 솔루션으로 밝혀졌습니다. 감사! – JoeB

+0

해야할까요? printDialog.PrintTicket = printDialog.PrintQueue.DefaultPrintTicket ;? 그렇지 않으면 컴파일되지 않습니다 –

+0

GetDesiredPageOrientation의 구현을 보는 것도 좋습니다. –