C# 在ASP.NET MVC中通过PrintQueue作业打印失败,打印文件大小为0字节

C# 在ASP.NET MVC中通过PrintQueue作业打印失败,打印文件大小为0字节,c#,asp.net,asp.net-mvc,printing,printqueue,C#,Asp.net,Asp.net Mvc,Printing,Printqueue,我在一个ASP.NET MVC项目中尝试了MSDN中的以下示例: public void Print(string printQueueName, string printData) { PrintQueue printerQueue = new LocalPrintServer().GetPrintQueue(printQueueName); // Call AddJob PrintSystemJobInfo myPrintJob =

我在一个ASP.NET MVC项目中尝试了MSDN中的以下示例:

public void Print(string printQueueName, string printData)
    {
        PrintQueue printerQueue = new LocalPrintServer().GetPrintQueue(printQueueName);

        // Call AddJob
        PrintSystemJobInfo myPrintJob = printerQueue.AddJob();

        // Write a Byte buffer to the JobStream and close the stream
        Stream myStream = myPrintJob.JobStream;
        Byte[] myByteBuffer = UnicodeEncoding.Unicode.GetBytes(printData);
        myStream.Write(myByteBuffer, 0, myByteBuffer.Length);
        myStream.Close();
    }
我尝试打印到PDF、XPS和OneNote虚拟打印机。确认打印对话框后,打印作业出现在打印机队列中,然后消失,并创建打印文件,但大小为0字节

我不知道哪里是我的错,希望能在这里找到帮助


提前感谢。

这里的示例很接近,但在我的打印机上也不起作用。这与此无关,因为此示例不足以打印PDF或XPS,因为不能简单地将这些类型的字节流作为流输出到打印机。您至少有几个选项:

  • 使用。将PDF/TIFF/可能的onenote文件转换为图像(例如TIFF文件),您可以使用事件
    PrintDocument.PrintPage
    Graphics.DrawImage
    使用此类进行打印
  • 使用/购买第三方PDF。您可以直接使用XPS打印,但它存在一些问题(请参阅下面的详细信息)。我不知道
  • 通过使用打印机打印文件
  • 编写自己的打印驱动程序
更多详细信息
我不熟悉OneNote打印。XPS打印可能相当棘手。页边距需要以代码计算,因为它们取决于可在中找到的打印机设置。使用WPF(与XPS密切相关),我在XPS序列化过程中发现了一个bug<代码>XpsDocument不保留计算的可打印区域。文档将使用默认的可打印区域打印,这可能导致中断。我在Microsoft Connect上确认了此错误。见下面他们的回答

最后,如果您恰好正在运行SSRS,那么您可以轻松地将输出类型从PDF/XPS更改为image

Microsoft Connect上XPS错误的反馈(链接是私有的):

标题:XpsDocument不保留WPF的>FixedPage.Arrange()的计算排列

WPF团队最近已经审查了这个问题,并且将不会 解决这个问题的时候,团队正在关注bug 影响最大数量的WPF开发人员。如果你相信 此错误已解决,请使用任何 必要的支持细节

我们感谢您的反馈。然而,这一问题将不会得到解决 在WPF的下一个版本中。谢谢WPF团队