xp下wpf打印框出现乱码

1dit 2013-12-21 04:27:23
wpf调用系统打印,打印部分源码如下

PrintDialog pDialog = new PrintDialog();
pDialog.PageRangeSelection = PageRangeSelection.AllPages;
pDialog.UserPageRangeEnabled = true;
if (pDialog.ShowDialog()==true)
{
using (XpsDocument xpsDocument = new XpsDocument(printDocFile, FileAccess.ReadWrite))
{
FixedDocumentSequence fixedDocSeq = xpsDocument.GetFixedDocumentSequence();
pDialog.PrintDocument(fixedDocSeq.DocumentPaginator, "证书打印");
}
}

现象:
1.win7/8都不出问题。
2.xp下第一次打印没问题,第二次就会出现打印框乱码。
3.出问题的时候,影响了输入法(搜狗输入法).
第一次

第二次

第二次错误导致输入法的乱码


请问各位如何解决这个问题,小弟谢了先。
...全文
338 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小眼观察 2016-07-12
  • 打赏
  • 举报
回复
楼主你的这个问题解决了么,我也碰到了同样的问题,请指教,谢谢!
qq624470704 2015-06-12
  • 打赏
  • 举报
回复
将调用的资源都释放掉。
sunny007sun 2014-07-02
  • 打赏
  • 举报
回复
我也碰到过这样的问题~~ 没有用XpsDocument xpsDocument 进行打印而是换了一种方式:

var printDialog = new PrintDialog();
  
          printDialog.UserPageRangeEnabled = true;

          try
          {
              if (printDialog.ShowDialog() == true)
              {
                  printDialog.PrintTicket.PageBorderless = System.Printing.PageBorderless.None;
                  DocumentPaginator MyDocumentPaginator = ((IDocumentPaginatorSource)fixedDoc).DocumentPaginator;
                  MyDocumentPaginator.PageSize = new Size(96 * 18.8, MyPageHList.Max());

              



                  if (printDialog.PageRangeSelection == PageRangeSelection.UserPages)
                  {



                      var xdw = System.Printing.PrintQueue.CreateXpsDocumentWriter(printDialog.PrintQueue);
                      var vtxd = (System.Windows.Xps.VisualsToXpsDocument)xdw.CreateVisualsCollator();
                      for (int i = printDialog.PageRange.PageFrom - 1; i < printDialog.PageRange.PageTo; i++)
                      {
                          var v = MyDocumentPaginator.GetPage(i).Visual;
                          var cv = new ContainerVisual();
                          cv.Children.Add(v);
                          vtxd.Write(cv, printDialog.PrintTicket);
                          cv.Children.Remove(v);
                      }
                      vtxd.EndBatchWrite();

                  }
                  else
                  {

                      printDialog.PrintDocument(MyDocumentPaginator, "打印");
                  }

       
              }
          }
          catch (Exception ex)
          {
              MessageBox.Show(ex.Message);
              return;
          }


wujieaa 2014-05-21
  • 打赏
  • 举报
回复
我也遇到这个错误了,有解决方案吗?
hjjolin1988 2014-05-12
  • 打赏
  • 举报
回复
我也遇到了和你一样的问题,第一次正常,打印完后在点开就是乱码,和你发的图一模一样,请问你后来怎么解决了?
1dit 2013-12-21
  • 打赏
  • 举报
回复
引用 1 楼 mengfeiX 的回复:
http://technet.microsoft.com/zh-cn/magazine/system.windows.controls.printdialog.showdialog(VS.90).aspx 先去掉using试试看。可能XP和Win7/8的.NET版本差异吧
去点using还是错,话说去不去掉应该没得影响吧。
mengfeiX 2013-12-21
  • 打赏
  • 举报
回复
http://technet.microsoft.com/zh-cn/magazine/system.windows.controls.printdialog.showdialog(VS.90).aspx 先去掉using试试看。可能XP和Win7/8的.NET版本差异吧

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧