Можно ли открыть диалог PrintToFile только один раз в PrintPreview и экспортировать все изображения одновременно - PullRequest
0 голосов
/ 15 июня 2019

В настоящее время у меня есть вид, и скажем, у него есть 4 изображения.Но я хочу открыть диалог предварительного просмотра только один раз и распечатать все изображения.В настоящее время я могу сделать это с помощью этого кода.Но в диалоге PrintPreview есть опция PrintToFile.Проблема в том, что он приносит диалог сохранения файла для каждого изображения, 4 раза в случае 4 изображений.Можно ли открыть это диалоговое окно только один раз и напечатать все 4 изображения один раз.

public static void PrintChartsWithSinglePrintPreviewDialog(string[] files)
        {
            if (files == null || files.Count() < 1)
            {
                return;
            }
            using (var pdoc = new PrintDocument())
            {
                using (var pdi = new System.Windows.Forms.PrintDialog { Document = pdoc, UseEXDialog = true })
                {
                    if (pdi.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        pdoc.PrinterSettings = pdi.PrinterSettings;
                        pdoc.PrintPage += Pdoc_PrintPage;
                        foreach (var file in files)
                        {
                            pdoc.DocumentName = file;
                            pdoc.Print();
                            //pdoc.Dispose();
                        }
                        PrinterSettings settings = new PrinterSettings();
                        Xceed.Wpf.Toolkit.MessageBox.Show(string.Format(System.Windows.Application.Current.TryFindResource("PrintSuccessful").ToString(), settings.PrinterName),
                                "Print Successful", MessageBoxButton.OK);
                    }
                }
            }

    private static void Pdoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            string file = ((PrintDocument)sender).DocumentName;
            using (System.Drawing.Image img = System.Drawing.Image.FromFile(file))
            {
                Rectangle m = e.MarginBounds;

                if ((double)img.Width / (double)img.Height > (double)m.Width / (double)m.Height) // image is wider
                {
                    m.Height = (int)((double)img.Height / (double)img.Width * (double)m.Width);
                }
                else
                {
                    m.Width = (int)((double)img.Width / (double)img.Height * (double)m.Height);
                }
                e.Graphics.DrawImage(img, m);
            }
        }

Я видел класс PrinterSettings, но у него есть только свойство bool, включать или отключать параметр PrintToFile.

...