问题描述
wpf调用系统打印,打印部分源码如下PrintDialogpDialog=newPrintDialog();pDialog.PageRangeSelection=PageRangeSelection.AllPages;pDialog.UserPageRangeEnabled=true;if(pDialog.ShowDialog()==true){using(XpsDocumentxpsDocument=newXpsDocument(printDocFile,FileAccess.ReadWrite)){FixedDocumentSequencefixedDocSeq=xpsDocument.GetFixedDocumentSequence();pDialog.PrintDocument(fixedDocSeq.DocumentPaginator,"证书打印");}}
现象:1.win7/8都不出问题。2.xp下第一次打印没问题,第二次就会出现打印框乱码。3.出问题的时候,影响了输入法(搜狗输入法).第一次第二次第二次错误导致输入法的乱码请问各位如何解决这个问题,小弟谢了先。
解决方案
解决方案二:
http://technet.microsoft.com/zh-cn/magazine/system.windows.controls.printdialog.showdialog(VS.90).aspx先去掉using试试看。可能XP和Win7/8的.NET版本差异吧
解决方案三:
引用1楼mengfeiX的回复:
http://technet.microsoft.com/zh-cn/magazine/system.windows.controls.printdialog.showdialog(VS.90).aspx先去掉using试试看。可能XP和Win7/8的.NET版本差异吧
去点using还是错,话说去不去掉应该没得影响吧。
解决方案四:
我也遇到了和你一样的问题,第一次正常,打印完后在点开就是乱码,和你发的图一模一样,请问你后来怎么解决了?
解决方案五:
我也遇到这个错误了,有解决方案吗?
解决方案六:
我也碰到过这样的问题~~没有用XpsDocumentxpsDocument进行打印而是换了一种方式:varprintDialog=newPrintDialog();printDialog.UserPageRangeEnabled=true;try{if(printDialog.ShowDialog()==true){printDialog.PrintTicket.PageBorderless=System.Printing.PageBorderless.None;DocumentPaginatorMyDocumentPaginator=((IDocumentPaginatorSource)fixedDoc).DocumentPaginator;MyDocumentPaginator.PageSize=newSize(96*18.8,MyPageHList.Max());if(printDialog.PageRangeSelection==PageRangeSelection.UserPages){varxdw=System.Printing.PrintQueue.CreateXpsDocumentWriter(printDialog.PrintQueue);varvtxd=(System.Windows.Xps.VisualsToXpsDocument)xdw.CreateVisualsCollator();for(inti=printDialog.PageRange.PageFrom-1;i<printDialog.PageRange.PageTo;i++){varv=MyDocumentPaginator.GetPage(i).Visual;varcv=newContainerVisual();cv.Children.Add(v);vtxd.Write(cv,printDialog.PrintTicket);cv.Children.Remove(v);}vtxd.EndBatchWrite();}else{printDialog.PrintDocument(MyDocumentPaginator,"打印");}}}catch(Exceptionex){MessageBox.Show(ex.Message);return;}
解决方案七:
将调用的资源都释放掉。