Многие принтеры и многофункциональные устройства сегодня поддерживают печать PDF-файлов напрямую, это может решить одну из ваших проблем. Просто отправьте PDF на принтер. Фактически, некоторые даже поддерживают отправку URL-адреса, и принтер затем отправляется за документом и распечатывает его. Lexmark наверняка делает это, и я думаю, что некоторые другие поставщики делают то же самое. Это все еще означает, что вы должны иметь дело с документом Word. Word 2007 поддерживает PDF (с установленной надстройкой от Microsoft ), и я использовал эту функцию программно с большим успехом в C #.
Вот код для этого:
Microsoft.Office.Interop.Word.ApplicationClass msWord = new Microsoft.Office.Interop.Word.ApplicationClass();
object paramUnknown = Type.Missing;
object missing = Type.Missing;
object paramSaveChangesNo = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
//object paramFonts = Microsoft.Office.Interop.Word.wde
object paramFormatPDF = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
object paramTrue = true;
object paramReadOnly = true;
object sourceDoc = @"c:\input.doc"
object target = @"c:\output.pdf";
msWord.Visible = false;
//open .doc
msWord.Documents.Open(ref sourceDoc, ref paramUnknown, ref paramReadOnly, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown);
//so it won't show on the taskbar
msWord.Application.Visible = false;
msWord.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMinimize;
//save .doc to new target name and format
msWord.ActiveDocument.SaveAs(ref targetDoc, ref paramFormatPDF, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramTrue, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown);
msWord.ActiveDocument.Close(ref missing, ref missing, ref missing);
msWord.Quit(ref paramSaveChangesNo, ref paramUnknown, ref paramUnknown);
Наконец, если ваше устройство не поддерживает печать PDF, вы можете использовать Ghostscript или другие инструменты для преобразования PDF в PS или даже PCL. Не самое лучшее, так как это означает запуск небольшого неуправляемого кода или наихудшего случая, создание оболочки и выполнение командной строки GS, что, как говорится, в настоящее время мы делаем это в одном из наших веб-приложений, и это работает хорошо. Кроме того, мы делаем это не для печати, а скорее для объединения нескольких PDF-файлов, но в итоге все будет работать одинаково.