Вы можете использовать виртуальный драйвер печати doPdf http://www.dopdf.com/, если это разрешено на рабочей машине. Это преобразует более или менее любой тип файла в формат PDF, а не только RTF. После установки он отображается как еще один принтер в Диспетчере печати.
Чтобы использовать его, скажем, в коде winforms, я адаптировал код, найденный в примере печати msdn http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx
private void button1_Click(object sender, EventArgs e)
{
try
{
streamToPrint = new System.IO.StreamReader
(@"F:\temp\labTest.txt");
try
{
printFont = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
pd.PrinterSettings.PrinterName = "doPDF v6";//<-------added
pd.PrintPage += new PrintPageEventHandler
(this.pd_PrintPage);
pd.Print();
}
finally
{
streamToPrint.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Единственная часть кода, которую мне нужно было добавить, была отмечена выше, например. pd.PrinterSettings.PrinterName = "doPDF v6";
Возможно, существует метод перечисления принтеров, который был бы более элегантным и надежным, и на основании этого можно было бы проверить, существует ли драйвер принтера, возможно, в соответствии с настройкой файла конфигурации.
Обновление:
Обработка нескольких страниц осуществляется в этом методе: this.pd_PrintPage согласно примеру msdn.
PrintDocument поддерживает от и до печати страницы.
DoPdf автоматически откроет окно fileSaveAsDialog, чтобы файлы могли быть сохранены в формате PDF.
А как насчет RTF, хотя ?
Формат Microsoft не очень хорошо поддерживается, так что кажется. В этой статье http://msdn.microsoft.com/en-us/library/ms996492.aspx с демонстрационным кодом в качестве отправной точки используется RichTextBox, а P / Invoke использует возможности Win32 для печати RTF как WYSIWG. Элемент управления определяет собственный метод длины страницы, заменяющий метод, использованный выше в фрагменте кода, и все еще использует PrintDocument, поэтому он должен быть простым в использовании. Вы можете назначить любой rtf, используя метод Rtb.rtf.