在c#中打印pdf没有预览

本文关键字:pdf 打印 | 更新日期: 2023-09-27 18:05:14

我试图在windows应用程序中使用c#打印。pdf和。tif文件。

打印成功,但我的问题是Adobe阅读器在后台打开pdf文件,windows打印对话框打开tif文件。

实际上我将使用一个服务来运行我的方法,所以这些过程应该默默地发生。我能做些什么来避免这种情况?

我的代码

public void PrintDocument(string filepath)
        {
            //PrintDialog pd = new PrintDialog();            
            printProcess.StartInfo.FileName = filepath; 
            //Also tried usecellexcecution=false;
            //Redirect=true; something like this
            printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            printProcess.StartInfo.Verb = "Print";
            printProcess.StartInfo.CreateNoWindow = true;
            PrinterSettings setting = new PrinterSettings();
            setting.DefaultPageSettings.Landscape = true; 
            printProcess.Start();
            printProcess.CloseMainWindow(); 
        }

我尝试使用MSDN中建议的RawprinterHelper,但它打印垃圾字符。

在c#中打印pdf没有预览

获取pdf进程的窗口句柄,然后隐藏它或使用进程类的窗口样式最小化它。

是的,它被启动了,因为你使用的是Process.Start.

如果您的打印机在网络上,并且您知道它的IP地址,则可以使用TcpClient将文件直接发送到打印机。我已经在我的打印机上工作了,但只尝试过pdf,所以我不知道它在其他打印机/文件类型上的工作效果如何。

您必须更改打印机设置,使其使用tcp端口(在设备和打印机中选择您的打印机(单击),然后单击打印服务器属性,在打开的向导中可以添加新的tcp端口)。您还必须将打印机设置为raw而不是lpc设置

然后我使用了类似于下面的方法;

        public void SilentPrint(string filePath, string printerIPAddress)
    {
        byte[] bytes = System.IO.File.ReadAllBytes(filePath);
        var client = new TcpClient(printerIPAddress, 9100);//9100 is the default print port for raw data
        using (var stream = client.GetStream())
        {
            stream.Write(bytes, 0, bytes.Length);
            stream.Close();
        }
    }

如果你想默默地打印PDF,那么你需要使用合适的工具。在这种情况下,它不是Adobe Reader,因为它总是启动应用程序窗口,它不会以静默模式加载。

找到一个PDF库,它会让你默默地打印PDF。

尝试"PrintTo"作为你的动词。这将禁用"打印预览"阶段。