Отображение небольшого диалогового окна с комбинированным списком, в котором для его элементов установлен набор строк, возвращаемый PrinterSettings.InstalledPrinters
.
Если вы можете сделать требование, чтобы GSView был установлен на машине, вы можете без вывода сообщений распечатать PDF-файл. Это немного медленно и оканчивается, но, по крайней мере, вам не нужно открывать Acrobat.
Вот код, который я использую для распечатки некоторых PDF-файлов, которые я получаю от веб-службы UPS:
private void PrintFormPdfData(byte[] formPdfData)
{
string tempFile;
tempFile = Path.GetTempFileName();
using (FileStream fs = new FileStream(tempFile, FileMode.Create))
{
fs.Write(formPdfData, 0, formPdfData.Length);
fs.Flush();
}
try
{
string gsArguments;
string gsLocation;
ProcessStartInfo gsProcessInfo;
Process gsProcess;
gsArguments = string.Format("-grey -noquery -printer \"HP LaserJet 5M\" \"{0}\"", tempFile);
gsLocation = @"C:\Program Files\Ghostgum\gsview\gsprint.exe";
gsProcessInfo = new ProcessStartInfo();
gsProcessInfo.WindowStyle = ProcessWindowStyle.Hidden;
gsProcessInfo.FileName = gsLocation;
gsProcessInfo.Arguments = gsArguments;
gsProcess = Process.Start(gsProcessInfo);
gsProcess.WaitForExit();
}
finally
{
File.Delete(tempFile);
}
}
Как видите, он принимает данные PDF в виде байтового массива, записывает их во временный файл и запускает gsprint.exe для автоматической печати файла на указанном принтере («HP Laserjet 5M»). Вы можете заменить имя принтера тем, которое выберет пользователь в диалоговом окне.
Печать PNG или GIF будет намного проще - просто расширьте класс PrintDocument и используйте обычный диалог печати, предоставляемый Windows Forms.
Удачи!