В настоящее время у меня есть вид, и скажем, у него есть 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.