有没有办法确定Microsoft XPS Document Writer是否在系统上可用且可用

时间:2012-03-16 10:38:34

标签: c# .net xps

是否有可靠的方法来确定Microsoft XPS Document Writer是否可以通过.Net在系统上运行和运行?

此外,XPS Writer的名称在所有Windows发行版中是否相同(例如英语,德语(...))?

自Vista以来,XPS Writer绝对可用于所有Windows系统。同样适用于简化版,所有x86和x64版本以及Windows 8?

3 个答案:

答案 0 :(得分:1)

我不知道这个名字,但“打印机”的型号也是Microsoft XPS Document Writer,它将保持不变。

您可以只使用该型号查找打印机!

答案 1 :(得分:1)

查看http://msdn.microsoft.com/en-us/library/aa969772.aspx

我怀疑你可以使用下面的代码段来尝试打印XPS,如果它不起作用,你可能没有打印机。

            try
            {
                // Print the Xps file while providing XPS validation and progress notifications.
                PrintSystemJobInfo xpsPrintJob = defaultPrintQueue.AddJob(f.Name, nextFile, false);
            }
            catch (PrintJobException e)
            {
                Console.WriteLine("\n\t{0} could not be added to the print queue.", f.Name);
                if (e.InnerException.Message == "File contains corrupted data.")
                {
                    Console.WriteLine("\tIt is not a valid XPS file. Use the isXPS Conformance Tool to debug it.");
                }
                Console.WriteLine("\tContinuing with next XPS file.\n");
            }

答案 2 :(得分:0)

正如Pieter Witvoet所建议的,这是一个方法,如果安装了XPSPrinter,则返回基于驱动程序名称。

该方法循环通过打印机,直到找到一个或扫描每一个而没有找到一个。 参考" System.Management"需要添加到项目中。

public class Cipher { 

    private int secretKey;

    public Cipher() { 
        secretKey = 1;
        String s = "A B C";

        String b = caesarEncrypt(s);
        String c = caesarDecrypt(b);

        System.out.println("Encrypted: " + b);
        System.out.println("Decrypted: " + c);
    }


    public String caesarEncrypt(String s) { 
        String r = "";
        for(int i = 0; i < s.length(); i++){ 

            char c = (char)(s.charAt(i));
            if(Character.isLetter(c)){
                if(Character.isUpperCase(c))
                    r += (char)('A' + (c + 'A' + secretKey) % 26);
                else
                    r += (char)('a' + (c + 'a' + secretKey) % 26);
            } else
                r += c;
        }  
        return r;
    }

    public String caesarDecrypt(String s) { 
        String r = "";
        for(int i = 0; i < s.length(); i++) { 
            char c = (char)(s.charAt(i));
            if(Character.isLetter(c)) { 
                if(Character.isUpperCase(c))
                    r += (char)('A' + (c - 'A' + (26 - secretKey)) % 26);
                else
                    r += (char)('a' + (c - 'a' + (26 - secretKey)) % 26);
            } else r+= c;
        }
        return r;
    }

}

编辑:我发现驱动程序名称有时会出错。它可能是&#34;远程桌面轻松打印&#34;而不是XPS打印机和其他一些非xps打印机。因此,检查DeviceID是否包含XPS是一种更安全的方式。