Преобразуйте RTF-документ в изображение или распечатайте RTF-файл на сервере

StackOverflow https://stackoverflow.com/questions/666021

  •  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();

    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top