【问题标题】:Printing through PrintQueue job in ASP.NET MVC fails with 0 byte size printed file通过 ASP.NET MVC 中的 PrintQueue 作业打印失败,打印文件为 0 字节大小
【发布时间】:2013-11-25 16:58:11
【问题描述】:

我在 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 字节!!!

不知道自己的错在哪里,希望能在这里得到帮助。

提前致谢。

【问题讨论】:

    标签: c# asp.net asp.net-mvc printing printqueue


    【解决方案1】:

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

    • 使用PrintDocument。将 PDF/TIFF/可能的 onenote 文件转换为图像(例如 tiff 文件),您可以使用事件 PrintDocument.PrintPageGraphics.DrawImage 使用此类打印。
    • 使用/购买第 3 方print API's 用于 PDF。您可以使用直接 XPS 打印,但存在一些问题(请参阅下面的详细信息)。 OneNote 我不知道。
    • 通过command line 使用Process 打印文件
    • 编写您自己的打印驱动程序

    更多详情
    我不熟悉 OneNote 打印。 XPS 打印可能非常棘手。需要在代码中计算边距,因为它们取决于可以在PrintTicket 中找到的打印机设置。使用 WPF(与 XPS 密切相关)时,我在 XPS 序列化过程中的某处发现了一个错误。 XpsDocument 不保留计算的可打印区域。文档将使用可能导致截断的默认可打印区域打印。我在 Microsoft Connect 上确认了这个错误。请参阅下面的回复。

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

    Microsoft Connect 上的 XPS 错误反馈(链接为私人):

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

    WPF 团队最近审查了此问题,将不会 解决这个问题,因为此时团队正专注于错误 影响最多的 WPF 开发人员。如果你相信 这已错误解决,请使用任何重新激活此错误 必要的支持细节。

    感谢您的反馈。但是,这个问题不会被解决 在下一版本的 WPF 中。谢谢你。 –WPF 团队

    .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多