是否有可靠的方法来确定Microsoft XPS Document Writer是否可以通过.Net在系统上运行和运行?
此外,XPS Writer的名称在所有Windows发行版中是否相同(例如英语,德语(...))?
自Vista以来,XPS Writer绝对可用于所有Windows系统。同样适用于简化版,所有x86和x64版本以及Windows 8?
答案 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是一种更安全的方式。