【问题标题】:Print multiple images using Process.StartInfo.Verb=“print” command使用 Process.StartInfo.Verb="print" 命令打印多个图像
【发布时间】:2015-07-16 15:17:57
【问题描述】:

我正在使用此代码与 windows 打印图片一起打印...

string fileName = @"C:\Images\12.jpg";
var p = new Process();
p.StartInfo.FileName = fileName;
p.StartInfo.Verb = "Print";
p.Start();

我想从目录中打开多张图片到这里,我该怎么做?

我试过这段代码,但不起作用:

var p = new Process();
DirectoryInfo d = new DirectoryInfo(@"Directory address");
FileInfo[] Files = d.GetFiles("*.jpg");
foreach (FileInfo file in Files)
{
    p.StartInfo.FileName += file.FullName.ToList();
    p.StartInfo.Verb = "Print";
    p.Start();
}

【问题讨论】:

标签: c# windows image printing


【解决方案1】:

从您的代码示例中,您似乎只想为每个文件调用单独的“打印”动词命令。如果是这样,那么您应该能够通过简单地在循环中分配文件名来完成此操作,而不是枚举文件名的字符并将其附加到 FileName 属性:

DirectoryInfo d = new DirectoryInfo(@"Directory address");
FileInfo[] Files = d.GetFiles("*.jpg");
ProcessStartInfo psi = new ProcessStartInfo();

psi.Verb = "Print";
foreach (FileInfo file in Files)
{
    psi.FileName = file.FullName;
    Process.Start(psi);
}

请注意,您不能为此目的重复使用单个 Process 对象。一旦启动了给定的Process 对象,就无法再次启动它。但是您可以重用ProcessStartInfo 对象,在循环的每次迭代中开始一个新进程。

编辑:

来自您的评论:

我不想简单地为每个文件调用单独的“打印”动词命令...我想将所有文件添加到一个“打印”动词命令中

使用Process 类是不可能的。根据定义,DDE“打印”动词(即“命令”)只处理一个文档。如果您愿意做很多额外的工作,您可以编写自己的 DDE 客户端,尝试使用 DDEEXEC 与知道如何打印图像文件的 DDE 服务器进行迭代交互。但是 a) 这更多的工作,并且 b) 只有当你碰巧安装了一个通过 DDEEXEC 处理图像文件打印的程序时它仍然有效(Windows 内置的打印支持图片没有)。

我建议你坚持以上。

(并且为了将来参考,如果您只想调用一次Process.Start(),那么将它放在循环中绝对不是要走的路。如果您的示例代码与你实际上想要做什么。:) )

【讨论】:

  • 不,我不想简单地为每个文件调用单独的“打印”动词命令...我想在一个“打印”动词命令中添加所有文件...
猜你喜欢
  • 2016-04-23
  • 2016-09-22
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多