我一直在尝试使用以下控制台应用程序在Windows 8.1计算机上打印文档;
using System;
using System.IO;
using System.Printing;
namespace BasicPrinter
{
class Program
{
private static void Main(string[] args)
{
var server = new LocalPrintServer();
Console.WriteLine("Default printer:{0}", server.DefaultPrintQueue.Name);
Console.WriteLine("Default spool directory:{0}",server.DefaultSpoolDirectory);
var printQueue = server.DefaultPrintQueue;
Console.WriteLine(printQueue.Name);
Console.ReadLine();
var bytes = File.ReadAllBytes("c:/Printing/Test2.pdf");
var job = printQueue.AddJob();
job.JobStream.Write(bytes, 0, bytes.Length);
job.JobStream.Close();
job.JobStream.Dispose();
job.Dispose();
}
}
}
我正在使用Visual Studio 2013在Windows 7计算机上进行开发。当我在我的计算机上运行此应用程序时,它会按预期打印文档。然后我远程进入Windows 8.1机器,从我的Windows 7机器(以及test2 pdf文件)复制bin文件的内容,然后从那里再次运行它。
应用程序运行,我看到打印机的名称,当我在设备管理器中查看打印机时,我发现它正在假脱机但是然后打印它只是删除了作业。
我已经检查过我的目标是"任何CPU"两台机器都是x64。
为什么这在Windows 8.1计算机上不起作用?
这是我唯一可以访问的8.1机器。
答案 0 :(得分:0)
Windows 8.1使用v4打印驱动程序。他们要求添加到作业流的文件是.xps,否则就会得到0 byte spool file
我用word创建了一个名为Test3.xps的xps文件,然后替换了
var bytes = File.ReadAllBytes("c:/Printing/Test2.pdf");
带
var bytes = File.ReadAllBytes("c:/Printing/Test3.xps");
这印刷了。