Хотя я не могу ответить на ваш вопрос конкретно, я обнаружил, что не смог этого сделать, так как Adobe изменила Reader, я думаю, в версии 9 или 10, чтобы вы не могли закрыть диалог печати, а само окно продолжало появлятьсяв любом случае, и так как у всех моих пользователей были установлены разные версии Reader, я не мог получить что-либо постоянно работающее.Если вы хотите попробовать в любом случае, взгляните на API Reader - вам нужно добавить ссылку на правильную библиотеку COM и перейти оттуда.Больно.
В итоге я полностью отбросил Adobe, пропустив PDF через GhostScript .Ниже приводится вспомогательный класс, который я создал для выполнения этой работы.gsExePath
должно быть что-то вроде C:\Program Files\gs\gs8.71\bin\gswin32c.exe
.
public class GSInterface
{
public string GhostScriptExePath { get; private set; }
public GSInterface(string gsExePath)
{
this.GhostScriptExePath = gsExePath;
}
public virtual void CallGhostScript(string[] args)
{
var p = new Process();
p.StartInfo.FileName = this.GhostScriptExePath;
p.StartInfo.Arguments = string.Join(" ", args);
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();
p.WaitForExit();
}
public void Print(string filename, string printerName)
{
this.CallGhostScript(new string[] {
"-q",
"-sDEVICE=mswinpr2",
"-sPAPERSIZE=a4",
"-dNOPAUSE",
"-dNoCancel",
"-dBATCH",
"-dDuplex",
string.Format(@"-sOutputFile=""\\spool\{0}""", printerName),
string.Format(@"""{0}""", filename)
});
}
}
Следующее должно печатать на принтере Windows по умолчанию:
var printerName = new System.Drawing.Printing.PrinterSettings().PrinterName;
var gs = new GSInterface(gsExePath);
gs.Print(filename, printername);