繁体   English   中英

打印 pdf 而不在 c 中预览

[英]Printing pdf without preview in c #

我正在尝试在 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 ,但它会打印垃圾字符。

如果您的打印机在网络上并且您知道它是 IP 地址,则可以使用 TcpClient 将文件直接发送到打印机。 我已经让这个适用于我的打印机,但只对 PDF 进行了尝试,所以我不知道它对其他打印机/文件类型的效果如何。

您必须更改您的打印机设置,以便它使用 tcp 端口(在设备和打印机 select 您的打印机(单击),然后单击打印服务器属性,在打开的向导中您可以添加一个新的 ZB136EF15F6A06D86367 端口)。 您还必须将打印机设置为 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进程的window句柄,然后将其隐藏或使用进程类的windowstyle将其最小化。

是的,它会启动,因为您使用的是 Process.Start。

尝试“PrintTo”作为您的动词。 这应该禁用“打印预览”阶段。

如果您想静默打印 PDF,那么您需要使用正确的工具来完成这项工作。 在这种情况下,它不是 Adobe Reader,因为它总是会启动应用程序 window,它不会在静默模式下加载。

找到一个 PDF 库,它可以让您静默打印 PDF。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM