WPF / MVVM。一次打印多张图片

时间:2018-09-27 08:20:32

标签: wpf mvvm printdialog multifile

我必须打印存储在目录中的所有图片。用户要求显示打印预览对话框,以便他们可以选择页面排列(see picture)。 我尝试使用“处理”工具,但它仅适用于一个文件。这是代码

                        Dim info As New ProcessStartInfo()
                        info.Verb = "print"

                        info.FileName = "C:\Pictures\pic1.jpg"
                        info.LoadUserProfile = True

                        Dim p As New Process()
                        Try
                            p.StartInfo = info
                            p.Start()
                            p.WaitForExit()
                            System.Threading.Thread.Sleep(3000)
                            If False = p.CloseMainWindow() Then
                                p.Kill()
                            End If
                        Catch i As System.InvalidOperationException
                            System.Threading.Thread.Sleep(100)
                        End Try

这有效。当我尝试将info.FileName设置为“ C:\ Pictures \ pic1.jpg C:\ Pictures \ pic2.jpg”或“ [pic1]; [pic2]”或“ ”时;但我总是收到错误消息

System.ComponentModel.Win32Exception {“找不到文件”}

如何配置它以选择目录中的所有文件? 谢谢

3 个答案:

答案 0 :(得分:0)

您可以使用

using System.IO;
:
:
string[] filePaths = Directory.GetFiles(@"c:\Pictures\", "*.jpg");

,然后遍历文件路径以打印每个文件

答案 1 :(得分:0)

我必须通过循环目录文件来进行打印。但这会导致打印过程以授权模式运行,并且每个要打印的文件都运行一个。这不是我所需要的:我希望模拟多重选择和打印。 我试图在Windows命令外壳中运行“打印”命令

Dim pr As New System.Windows.Controls.PrintDialog
                Dim myprinter = pr.PrintQueue.QueuePort.Name


Dim files = "C:\pic1.jpg C:\pic2.jpg"
Dim command = String.Format("/C print /D:{0} {1}", myprinter, files)
info.FileName = "cmd.exe"
info.Arguments = command

生成的命令字符串是

/ C打印/ D:HPColorLaserJetM553 C:\ pic1.jpg C:\ pic2.jpg

不起作用,即使该过程结束时没有明显的错误。 如果我尝试从Windows Shell运行命令字符串,则会收到错误消息

“无法初始化设备D:HPColorLaserJetM553”

答案 2 :(得分:0)

将所有文件路径存储在string[]char[][]中(字符串数组) 然后循环此指令:

rundll32 shimgvw.dll ImageView_PrintTo /pt "files[i]" "HP Color LaserJet M553 PCL 6"