Многие принтеры и многофункциональные устройства сегодня поддерживают печать PDF-файлов напрямую, это может решить одну из ваших проблем. Просто отправьте PDF-файл на принтер. Фактически, некоторые даже поддерживают отправку URL-адреса, и затем принтер берет документ и распечатывает его. Lexmark точно так же поступает, и я думаю, что некоторые другие поставщики тоже. Это по-прежнему означает, что вам нужно иметь дело с документом Word. Word 2007 поддерживает PDF (с помощью add- в установленном от 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-файлов вместе, но в конечном итоге это будет работать так же.
person
Douglas Anderson
schedule
21.10.2008