2008-10-15 66 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是虚拟化的吗?如果是这样,对象不被绘制,那是一种可能性。看看Petzold的Printing example

+1

我已签出那个例子,但他使用的文件进行打印。我有一个内存集合可以打印! – azamsharp 2008-10-15 15:32:28

+0

Petzold链接不再存在 – 2010-02-22 19:11:56

-4

这是我解决这个问题的方法。这有点不稳定,但适合我的情况。

我读了我的集合并将其转换为字符串。整个集合现在驻留在一个StringBuilder对象中。接下来,我在客户机的文件中看到了文本/字符串,然后用/ p运行记事本进程来打印文件的内容。

它的工作原理和成功打印内容。

最后,有一个计时器在5秒钟后被调用并删除该文件。基本上在5秒内请求已经发送到打印机队列。但更好的解决方案是确保打印作业已经以这种方式处理,您将100%确信作业已经完成。

0

如果你想从WPF打印漂亮的文件,你需要建立一个FixedDocument并打印它,不幸的是它可能非常复杂,这取决于你打印的内容。

有在这里创建了一个固定文档一些示例代码:http://www.ericsink.com/wpf3d/B_Printing.html

2

固定文档支持数据绑定(除FlowDocument的除外)像任何其他XAML文档。只需在固定文档中托管listview并将其显示在DocumentViewer中(它具有内置的打印支持)。但是,如果你的列表对于一个页面来说太长,FixedDocument不会自动生成一个新页面(就像flowdocument一样)。因此您必须使用代码动态创建新页面,因为这不能在纯xaml中完成。