Wpf DocumentViewer 컨트롤을 사용하면 사용자가 인쇄 버튼을 클릭 할 때 DocumentViewer가 표시하는 PrintDialog에 PageOrientation을 설정하는 방법을 알 수 없습니다. 이것에 연결하는 방법이 있습니까?Wpf DocumentViewer에 대한 PageOrientation 설정 PrintDialog
16
A
답변
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);
}
}
}
기본 문서 뷰어는 이미 1800에 친숙하지 않은 텍스트가 포함되어 있기 때문에 이미 기본 문서 뷰어를 덮어 썼습니다. 따라서이 문서는 훌륭한 솔루션으로 밝혀졌습니다. 감사! – JoeB
해야할까요? printDialog.PrintTicket = printDialog.PrintQueue.DefaultPrintTicket ;? 그렇지 않으면 컴파일되지 않습니다 –
GetDesiredPageOrientation의 구현을 보는 것도 좋습니다. –