【问题标题】:Print pdf file without opening Print Dialog using windows form application使用 Windows 窗体应用程序在不打开打印对话框的情况下打印 pdf 文件
【发布时间】:2019-02-24 20:39:16
【问题描述】:

我想在不打开打印对话框的情况下从 Windows 应用程序打印 PDF 文件 (url)。

我试过下面的代码

        string pdfUrl="mysite.com/test.pdf";
        string printerName = "Microsoft Print To PDF";
        using (var client = new System.Net.WebClient())
        {
            client.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            client.DownloadFile(pdfUrl, filePath);
        }

        ProcessStartInfo info = new ProcessStartInfo();
        info.Verb = "print";
        info.FileName = filePath;
        info.Arguments = "\"" + printerName + "\"";
        info.UseShellExecute = true;
        info.CreateNoWindow = true;
        info.WindowStyle = ProcessWindowStyle.Hidden;
        info.WorkingDirectory = Path.GetDirectoryName(filePath);

        Process p = new Process();
        p.StartInfo = info;
        p.Start();

        //p.WaitForInputIdle();
        //System.Threading.Thread.Sleep(3000);
        //if (false == p.CloseMainWindow())
        //    p.Kill();

但在 p.Start(); 中出现错误 System.ComponentModel.Win32Exception: 没有应用程序与此操作的指定文件关联

缺少什么?

请建议如何解决这个问题。

【问题讨论】:

  • 你安装了什么程序来打印 pdfs?
  • 我没有使用任何程序。我需要任何带有此代码的程序吗?
  • Microsoft Edge 是我机器 PDF 的默认启动器
  • 我已将其更改为 acrobat reader。然后使用“Microsoft Print To PDF”打印成功,但是当我给打印机命名为“Microsoft XPS Document Writer”时,它也使用“Microsoft Print To PDF”打印
  • 我已将其更改为 acrobat reader。然后使用打印机“Microsoft Print To PDF”打印成功,但是当我给打印机命名为“Microsoft XPS Document Writer”时,它也使用打印机“Microsoft Print To PDF”打印。如何将文档打印到任何打印机 "info.Arguments = "\"" + printerName + "\"";"?

标签: c# .net winforms file printing


【解决方案1】:

我的意见是您应该使用任何第三方库来打印 PDF。 我们正在使用以下 C# PDF 库 https://pdfium.patagames.com/c-pdf-library/

是的,这是商业图书馆,所以我不知道我是否有权在此处放置链接。

这是无需任何用户交互即可打印 PDF 的代码:

public void PrintPdf()
{
    var doc = PdfDocument.Load("c:\test.pdf");
    var printDoc = new PdfPrintDocument(doc);
    PrintController printController = new StandardPrintController();
    printDoc.PrintController = printController;
    printDoc.Print(); // Print PDF document
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    相关资源
    最近更新 更多