Как мне задать имя задания печати при использовании элемента управления DocumentViewer?

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

  •  09-09-2019
  •  | 
  •  

Вопрос

Я использую элемент управления WPF DocumentViewer для отображения документа XPS следующим образом:

viewer.Document = xpsDocument.GetFixedDocumentSequence();

При нажатии кнопки печати внутри программы просмотра документов все печатается нормально, однако название задания печати - System .Windows.Документы.Исправлена последовательность документов, которая далека от идеальной.

Как мне задать название задания на печать?

Я знаю, как использовать PrintDialog.PrintDocument() позволяет мне задать имя, но я не вижу, как это сделать с помощью элемента управления DocumentViewer.

Это было полезно?

Решение

Я нашел решение.

Добавьте это в XAML

<Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Print" PreviewExecuted="CommandBinding_PreviewExecuted" Executed="CommandBinding_Executed" />
</Window.CommandBindings>

И это к коду, лежащему в основе

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
}

Следует отметить пару моментов.Метод PreviewExecuted не выполняется, если событие Exectued не привязано к.Не знаю почему.

Другие советы

У меня была такая же проблема, однако переопределение команды Печати не сработало бы в моей ситуации, поэтому я нашел другое решение, которое работает так же хорошо

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);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top