Преобразуйте RTF-документ в изображение или распечатайте RTF-файл на сервере
-
21-08-2019 - |
Вопрос
У меня есть ситуация, когда я хочу преобразование RTF-файла документ к изображению для архивирования и печати.Я использую .NET.
Существуют ли какие-либо библиотеки, которые могли бы помочь мне с этим преобразованием?
Мне нужно
- преобразование RTF-файла в изображение на сервере
- установите формат бумаги, которого необходимо придерживаться при создании изображения
Коммерческая библиотека - это вариант, но я предпочитаю ОС.Если есть способ сделать это на стороне клиента, это также допустимый ответ, но на стороне сервера было бы чрезвычайно приятно.
Редактировать:
Спасибо за все замечательные ответы.Поскольку все они связаны с печатью RTF-документа, у меня есть следующий вопрос:
- Каков наилучший способ распечатать RTF-документ на сервере
Решение
Моя рекомендация заключалась бы в том, чтобы иметь драйвер печати, который выполняет выгрузку в изображение - таким образом, вы можете использовать стандартные функции печати (например, определение формата бумаги), а затем захватить файл и использовать его для фактической печати или архивирования.
Бесплатная версия с открытым исходным кодом - это: Драйвер принтера виртуальных изображений
Другие советы
Недавно мне пришлось столкнуться с этим.Наше приложение позволило бы пользователю отредактировать некоторый RTF-файл в стандартном элементе управления (поставляется с Visual Studio), а затем преобразовать его в изображение, чтобы мы могли отправить его в другое приложение, которое не понимает RTF.
Я довольно тщательно поискал в Интернете, и оказалось, что единственной возможностью было сделать скриншот элемента управления и преобразовать его в изображение.Имеется в виду любой текст, который находился за пределами видимой области (т.е.вам пришлось прокрутить) не появится.Меня действительно удивило, что его пришлось вот так изрубить.
Я знаю, вы спрашивали о коммерческих библиотеках, но я подумал, что поделюсь с вами своим опытом работы со встроенным элементом управления.
Развивая ответ Роберта, вы можете, при необходимости, избежать загрузки стандартного драйвера печати, просто выбрав "стандартный" принтер, поставляемый с операционной системой, и выполнив печать в файл.Многие драйверы просто используют стандартную версию postscript.Как правило, довольно легко конвертировать файлы postscript в PDF-файлы для просмотра в случае необходимости.Распечатать их, как правило, тоже несложно.
Это решение требует немного больше работы, чем просто использование специализированного драйвера, который выводит изображение.
Я смог запечатлеть изображение richtextbox, следуя фрагменту кода.я думаю, что это может быть полезно и вам.
private void ShowBitmap_btn_Click(object sender, RoutedEventArgs e)
{
if (MyTextBox_txt == null)
return;
Rect _descendentBounds = VisualTreeHelper.GetDescendantBounds(MyTextBox_txt);
//RenderTargetBitmap _targetBitmap = new RenderTargetBitmap((Int32)_descendentBounds.Width,
// (Int32)_descendentBounds.Height,
// 96, 96, PixelFormats.Pbgra32);
Rect _tempRect = new Rect(System.Windows.Forms.Screen.PrimaryScreen.Bounds.X,
System.Windows.Forms.Screen.PrimaryScreen.Bounds.Y,
System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);
RenderTargetBitmap _targetBitmap = new RenderTargetBitmap((Int32)_tempRect.Width,
(Int32)_tempRect.Height,
96, 96, PixelFormats.Pbgra32);
DrawingVisual _drawingVisual = new DrawingVisual();
using (DrawingContext _drwaingContext = _drawingVisual.RenderOpen())
{
VisualBrush _visualBrush = new VisualBrush(MyTextBox_txt);
_drwaingContext.DrawRectangle(_visualBrush, null, new Rect(new Point(), _tempRect.Size));
}
_targetBitmap.Render(_drawingVisual);
PngBitmapEncoder _png = new PngBitmapEncoder();
_png.Frames.Add(BitmapFrame.Create(_targetBitmap));
Stream _fileStream;
_fileStream = File.Create(@"E:\sample1.png");
_png.Save(_fileStream);
System.Drawing.Bitmap _tempBitmap = new System.Drawing.Bitmap(_fileStream);
_tempBitmap.Save(@"E:\sample1.bmp");
_fileStream.Close();
_fileStream.Dispose();
}