Печать коллекции в WPF - PullRequest
       17

Печать коллекции в WPF

2 голосов
/ 15 октября 2008

Есть ли способ печати в коллекции памяти или переменной длины в WPF?

Я использую следующий код, в котором я печатаю элемент управления ListView. Но когда контент больше, чем вертикальная полоса прокрутки, он берет верх и обрезает контент.

 PrintDialog printDialog = new PrintDialog();
                printDialog.ShowDialog();

                printDialog.PrintVisual(lvDocumentSummary, "testing printing!");

Ответы [ 5 ]

6 голосов
/ 19 декабря 2008

Для печати нескольких страниц вам просто нужно использовать класс, реализующий DocumentPaginator. FixedDocument - одна из более сложных реализаций, FlowDocument - более простая.

FlowDocument fd = new FlowDocument();

foreach(object item in items)
{
    fd.Blocks.Add(new Paragraph(new Run(item.ToString())));
}

fd.Print();

или

PrintDialog pd = new PrintDialog();
pd.PrintDocument(fd);
2 голосов
/ 16 октября 2008

FixedDocument поддерживает привязку данных (кроме FlowDocument), как и любой другой документ xaml. просто разместите представление списка в фиксированном документе и отобразите его в DocumentViewer (который имеет встроенную поддержку печати).

однако, если ваш список слишком длинный для одной страницы, FixedDocument не генерирует новую страницу автоматически (как это делает flowdocument). поэтому вы должны вручную создать новую страницу с кодом, поскольку это не может быть сделано в чистом xaml.

0 голосов
/ 16 октября 2008

Вот мое решение этой проблемы. Это довольно шатко, но работает для моего сценария.

Я читаю свою коллекцию и превращаю ее в строку. Вся коллекция теперь находится в объекте StringBuilder. Затем я увидел текст / строку в файле на компьютере клиента, а затем запустил процесс блокнота с помощью / p, чтобы распечатать содержимое файла.

Работает и успешно печатает содержимое.

Наконец, есть таймер, который вызывается через 5 секунд и удаляет файл. Обычно в течение 5 секунд запрос уже отправлен в очередь принтера. Но лучшим решением будет убедиться, что задание на печать было обработано таким образом, и вы будете на 100% уверены, что задание выполнено.

0 голосов
/ 16 октября 2008

Если вам нужна хорошая печать из WPF, вам нужно создать FixedDocument и распечатать его, к сожалению, это может быть очень сложно в зависимости от того, что вы пытаетесь напечатать.

Здесь приведен пример кода, который создает FixedDocument: http://www.ericsink.com/wpf3d/B_Printing.html

0 голосов
/ 15 октября 2008

Интересно, виртуализирован ли ListView? Если это так, объект не нарисован, это возможно. Посмотрите на пример Printing от Petzold.

...