none
使用winform打印xps文件,打印完成后返回,调用界面文字丢失 RRS feed

  • 问题

  • 最近做了一个项目,使用了xps文件打印技术,现在有一个问题,只要不是接的Microsoft XPS Document Writer打印机的话,打完以后调用的主界面肯定花掉了(可以不连接真正的打印机,只要将打印的文档输出到打印队列即可),控件上字体啥的都看不到(花掉的是中文,我用的是宋体),使用控件刷新也不行。代码如下:

     private void button1_Click(object sender, EventArgs e)
            {
    	    string printName=@"c:\print.xps";
                Thread printingThread = new Thread(new ParameterizedThreadStart(BatchXPSPrinter.PrintXPS));
                printingThread.SetApartmentState(ApartmentState.STA);
                printingThread.Start(printName);
            }
    
    public class BatchXPSPrinter
        {
            
            public static void  PrintXPS(object sender)
            {
                string strFilename = sender.ToString();
           
                LocalPrintServer localPrintServer = new LocalPrintServer();
                PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();
                bool tt=defaultPrintQueue.IsXpsDevice;
                FileInfo f = new FileInfo(strFilename);
                try
                {
                    // Print the Xps file while providing XPS validation and progress notifications.
                    PrintSystemJobInfo xpsPrintJob = defaultPrintQueue.AddJob(f.Name,strFilename,false);
                    //xpsPrintJob.Dispose();
                    
                }
                catch (PrintJobException e)
                {
                    MessageBox.Show(string.Format("\n\t{0} could not be added to the print queue.", f.Name));
                    if (e.InnerException.Message == "File contains corrupted data.")
                    {
                        MessageBox.Show("\tIt is not a valid XPS file. Use the isXPS Conformance Tool to debug it.");
                    }
                   MessageBox.Show("\tContinuing with next XPS file.\n");
                }
            }
        }
    

    我也曾经用过wpf 下的docmentview.print(),但是由于需要从wpf返回到winform界面中,一旦返回winform也会花掉。

    弄了两三天了,也看了很多英文文档,感谢各位支持!

    2014年3月11日 9:34

答案

  • 当我吧系统设置成为英文的时候,程序就ok了,看起来不是代码编写的问题,估计应该是中文的xps文档在中文状态下打印,出现的这个问题。希望微软抓紧出一个补丁吧,先用别的方法来解决这个问题。

    • 已标记为答案 bcc222 2014年3月14日 5:43
    2014年3月14日 5:43

全部回复

  • 你好:
    请问“主界面花掉了”是什么意思,是控件中的的文本乱码吗?还是像你标题说的直接消失了?请问你的系统是中文的吗?
    你使用的是Windows Forms标准控件吗?还是使用的第三方的控件?
    请参考MSDN文档:演练:本地化 Windows 窗体 全球化Windows 窗体
    通过这篇文档你可以学习到如何让你的程序根据计算机的不同语言显示出不同的文本。

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年3月12日 9:01
    版主
  • 花掉了是指,选择打印机部分文字没了,或者是某些控件上的中文变成一块一块的了,有的时候也会出现对话框的button的大小也会变化。(仅限中文字体,有的时候某些英文字体不受影响)

    我使用的是标准的winfrom控件,xps文档是用word打印到xps writer出来的,打开的时候容易出现这样的问题。

    使用浏览器打开文档(xps viewer),使用激光打印机(微软自带程序,随便安装一个,可以不用打印出来)

    也会出现类似问题!

    文档我也用isxps.exe检测过,提示说我属于标准的xps文档!

    2014年3月13日 0:56
  • 当我吧系统设置成为英文的时候,程序就ok了,看起来不是代码编写的问题,估计应该是中文的xps文档在中文状态下打印,出现的这个问题。希望微软抓紧出一个补丁吧,先用别的方法来解决这个问题。

    • 已标记为答案 bcc222 2014年3月14日 5:43
    2014年3月14日 5:43