.NET:如何在不打开文件的情况下打印文件

Tob*_*ias 5 .net printing file

我们有一个基本上归档文件的应用程序,我们给用户打印这些文件的可能性.它们可以是.txt,.doc,.pdf,.jpg没什么特别的.是否有.NET方法将这些文件发送到打印机而不进一步处理它们,即打开它们?

我已经尝试使用StartInfo.Verb ="print"创建一个进程

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = fileName;
p.StartInfo.Verb = "print"
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

p.Start();
Run Code Online (Sandbox Code Playgroud)

它仍然打开我不想要的文件.有人可以帮忙吗?

任何帮助,将不胜感激.托比

jos*_*wer 7

这实际上非常非常容易.

使用System.Drawing.Printing.PrintDocument.

按照该链接中的示例,或者只使用此处的代码(我摘自我每天都在使用的打印自动化的内容).

例如,打印一个.jpg(BTW,这将不会打开任何编辑应用程序;它在后台打印到打印机)

public void SetupPrintHandler()
{
    PrintDocument printDoc = new PrintDocument();
    printDoc.PrintPage += new PrintPageEventHandler(OnPrintPage);

    printDoc.Print();
}

private void OnPrintPage(object sender, PrintPageEventArgs args)
{
    using (Image image = Image.FromFile(@"C:\file.jpg"))
    {
        Graphics g = args.Graphics;
        g.DrawImage(image, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • Tobias评论的Babelfish翻译:"看起来不错.无论如何对于jpegs" (5认同)

C-P*_*uru 6

我的理解是,大多数应用程序将在您打印时打开(甚至是短暂的).尝试右键单击MS Word文档并点击打印.你会看到Word打开,打印和关闭.

但是,您可能希望将其添加到代码中以保持进程隐藏并在完成时关闭:

p.Start();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
if (p.HasExited == false)
{
   p.WaitForExit(10000);
}

p.EnableRaisingEvents = true;
p.CloseMainWindow();
p.Close();
Run Code Online (Sandbox Code Playgroud)