Como faço para definir o nome do trabalho de impressão ao usar o controle DocumentViewer?
-
09-09-2019 - |
Pergunta
Eu tenho usando o controle WPF DocumentViewer para exibir um documento XPS assim:
viewer.Document = xpsDocument.GetFixedDocumentSequence();
Quando o botão de impressão dentro do visualizador de documentos é clicado tudo o que imprime bem, no entanto, o nome do trabalho de impressão é System.Windows.Documents.FixedDocumentSequence, que é menos do que o ideal.
Como faço para definir o nome do trabalho de impressão?
Eu sei que usando PrintDialog.PrintDocument () me permite definir o nome, mas eu não posso ver como fazê-lo usando o controle DocumentViewer.
Solução
Eu encontrei uma solução.
Adicione esta ao XAML
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Print" PreviewExecuted="CommandBinding_PreviewExecuted" Executed="CommandBinding_Executed" />
</Window.CommandBindings>
E isso para o por trás de código
private void CommandBinding_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
{
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() == true)
{
dialog.PrintDocument(Document.DocumentPaginator, "Print Job Title");
}
}
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
//needed so that preview executed works
}
Um par de coisas de nota. O método PreviewExecuted não acontece se o evento exectued não está vinculado. Não sei por que.
Outras dicas
Eu tive o mesmo problema no entanto substituindo o comando Imprimir não iria funcionar na minha situação, então eu encontrei um outro trabalho em torno de que as obras igualmente bem
internal class MyDocumentViewer : DocumentViewer
{
public string JobTitle { get; set; }
protected override void OnPrintCommand()
{
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() == true)
dialog.PrintDocument(Document.DocumentPaginator, JobTitle);
}
}