Como faço para definir o nome do trabalho de impressão ao usar o controle DocumentViewer?

StackOverflow https://stackoverflow.com/questions/588662

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

Foi útil?

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);
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top