【问题标题】:How to send PDF to network printer from .net?如何从 .net 将 PDF 发送到网络打印机?
【发布时间】:2017-11-24 18:01:03
【问题描述】:

我有一个在 IIS (Windows server 2008 r2) 上运行的 ASP Web API。 该服务器有两台可通过网络使用的打印机(同一型号,京瓷 fs-4200)。

我需要通过代码选择打印机并双面打印 PDF 文档(双面)。

  • LPR 似乎忽略了“-o sides=two-sided-long-edge”选项,可能仅在 UNIX 上可用。
  • 我正在使用 Spire.PDF,但已获得商业许可,我无法选择打印机。它打印到默认打印机,所以我每次都在配置它。

【问题讨论】:

    标签: c# asp.net pdf printing


    【解决方案1】:

    你可以这样做:

    File.Copy(yourPDFFile, @"\\yourservernname\yourprintername", true);
    

    或者创建一个流并通过 Socket 填充它

    Socket s = new Socket(SocketType.Stream, ProtocolType.Tcp) 
    IPAddress prnterIP = IPAddress.Parse(your ipaddress);
    IPEndPoint endPoint = new IPEndPoint(prnterIP, 0); //<-- 0 here means any port, can be explicitly set
    s.Connect(endPoint);
    s.Send(File.ReadAllBytes(path to your PDF file));
    s.Close();
    

    后者更冗长,但似乎效果更好。

    参考这里:Send text file directly to network printer

    虽然您在 ASP.NET 中运行,但可能存在权限问题,您可能需要进行相应调整。

    【讨论】:

    • 请不要只发布对其他 Stack Exchange 问题的链接答案。相反,请在此处包含答案的基本部分,并针对此特定问题定制答案。
    【解决方案2】:

    您是否可以在 Windows Server 中设置要打印的打印机,使其默认进行双面打印?如果是这样,看起来京瓷 FS-4200DN 将直接接受 PDF 文件进行打印,因此您可以通过命令行过程直接复制它:

    copy /b filename.pdf port:
    

    其中端口:是安装在系统上时分配给打印机的 Windows 端口。

    另外,打印机似乎可以使用一种称为 PRESCRIBE 的作业定义语言,它支持双面命令。可以预先添加 PRESCRIBE 命令以启用对 PDF 数据的双面打印,然后直接发送 PRESCRIBE+PDF 数据流。 https://www.kyoceradocumentsolutions.fr/index/document_solutions/outputmanagement/prescribe.-contextmargin-99204-contextmargingeneralcontextteaserGC-87757-File.cpsdownload.tmp/Manuel%20des%20commandes%20Prescribe.PDF 建议可以使用 DUPX 命令。我没有京瓷打印机可以试用,所以我不能肯定它会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 2023-01-10
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多