2008-10-15 5 views
2

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

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

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

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

ответ

6

Чтобы распечатать несколько страниц, вам просто нужно использовать класс, который реализует 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); 
-1

Интересно, виртуализирован ли ListView? Если это так, объект не нарисован, это возможность. Взгляните на печать example от Petzold.

+1

Я проверил этот пример, но он использует файлы для печати. У меня есть в памяти коллекция для печати! – azamsharp

+0

Ссылка Petzold больше не присутствует –

-4

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

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

Он работает, и он успешно распечатывает содержимое.

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

+2

Внешний вызов приложения для печати вещей, с условиями гонки? Ни за что! И подумать, что вы запустили веб-сайт базы знаний по разработке! Страшные вещи. –

+0

Вы можете легко достичь этого, используя FlowDocument и FixedDocuments! – azamsharp

+0

Это действительно плохой способ сделать это, вы только FlowDocument с BlockUIContainer. Если это особенно длинный список, используйте FixedDocument. – Echilon

0

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

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

2

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^