博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【翻译】打印RichTextBox内容:(寻找空闲打印机)
阅读量:5339 次
发布时间:2019-06-15

本文共 2856 字,大约阅读时间需要 9 分钟。

最近, 发表了关于打印RichTextBox内容的博文。一般,如果你使用documentPaginator或者visual,你可能因一些文本剪贴而终止。这可不是好事。当打印时容易出的bug是打印对话框。通常,我想使用空闲的打印机,而不是让我等待。下面是我针对此修改的代码。

 

foreach (PrintQueue pq in GetPrintQueues("\\\\servername"))             {
if (!pq.IsBusy) {
Print(pq); return; } } private IEnumerable
GetPrintQueues(string servername) {
PrintServer ps; if (string.IsNullOrEmpty(servername)) {
// local printer name ps = new LocalPrintServer(); } else {
// network printer share ps = new PrintServer(servername); } return ps.GetPrintQueues(); } void Print(PrintQueue pq) {
TextRange sourceDocument = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd); MemoryStream stream = new MemoryStream(); sourceDocument.Save(stream, DataFormats.Xaml); // Clone the source document's content into a new FlowDocument. FlowDocument flowDocumentCopy = new FlowDocument(); TextRange copyDocumentRange = new TextRange(flowDocumentCopy.ContentStart, flowDocumentCopy.ContentEnd); copyDocumentRange.Load(stream, DataFormats.Xaml); // Create a XpsDocumentWriter object, open a Windows common print dialog. // This methods returns a ref parameter that represents information about the dimensions of the printer media. XpsDocumentWriter docWriter = PrintQueue.CreateXpsDocumentWriter(pq); PageImageableArea ia = pq.GetPrintCapabilities().PageImageableArea; PrintTicket pt = pq.UserPrintTicket; if (docWriter != null && ia != null) {
DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDocumentCopy).DocumentPaginator; // Change the PageSize and PagePadding for the document to match the CanvasSize for the printer device. paginator.PageSize = new Size((double)pt.PageMediaSize.Width, (double)pt.PageMediaSize.Height); Thickness pagePadding = flowDocumentCopy.PagePadding; flowDocumentCopy.PagePadding = new Thickness( Math.Max(ia.OriginWidth, pagePadding.Left), Math.Max(ia.OriginHeight, pagePadding.Top), Math.Max((double)pt.PageMediaSize.Width - (double)(ia.OriginWidth + ia.ExtentWidth), pagePadding.Right), Math.Max((double)pt.PageMediaSize.Height - (double)(ia.OriginHeight + ia.ExtentHeight), pagePadding.Bottom)); flowDocumentCopy.ColumnWidth = double.PositiveInfinity; // Send DocumentPaginator to the printer. docWriter.Write(paginator); } }

转载于:https://www.cnblogs.com/JosephLiu/archive/2011/11/29/2267882.html

你可能感兴趣的文章
DLL 导出函数
查看>>
解析MD5算法
查看>>
Oracle中函数/过程返回多个值(结果集)
查看>>
第八周 bug燃尽图
查看>>
使用jQuery淡入淡出HTML文本效果
查看>>
mysql分表那些事
查看>>
list集合通过特定字段对查询到的数据进行排序
查看>>
第二讲(原生数据类型 Primitive Data Type) 第三讲(原生数据类型使用陷阱 Pitfall of Primitive Data Type) 学长教我学Java(2)...
查看>>
(九)MySQL用户和权限管理
查看>>
编程题
查看>>
dedecms利用xss+csrf getshell
查看>>
idea Error:java: Compilation failed: internal java compiler error
查看>>
Android中的ListView点击时的背景颜色设置
查看>>
git之坑2
查看>>
博彦科技面试
查看>>
latex 波浪线 ~
查看>>
[网络流24题]餐巾(cogs 461)
查看>>
SerialPort基本小例
查看>>
手机SN的NV值
查看>>
CoreData(数据持久化的方式)
查看>>