Многие принтеры и многофункциональные устройства сегодня поддерживают печать PDF-файлов напрямую, это может решить одну из ваших проблем. Просто отправьте PDF на принтер. На самом деле, некоторые даже поддерживают отправку URL-адреса, а затем принтер получает документ и печатает его. Lexmark точно это делает, и я думаю, что некоторые другие производители тоже. Это все равно означает, что вам нужно иметь дело с документом Word. Word 2007 поддерживает PDF (с add-in installed from 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-файлов togheter, но в итоге они будут работать одинаково.
Это работает только с txt-файлом? – 2012-08-31 12:41:21
1-й пример демонстрирует текст (строки), но класс PrintDocument использует объект Graphics для рисования. Это означает, что вы можете использовать пространство пространств имен System.Drawing (GDI +). – gimel 2012-08-31 13:19:21
ах я вижу .. но я полагаю, что собственный формат (например, MS Word) не поддерживается этим классом? – 2012-08-31 14:24:17