Преобразование документа RTF в изображение или печать RTF на сервере - PullRequest
1 голос
/ 20 марта 2009

У меня есть ситуация, когда я хочу преобразовать RTF документ в изображение для архивирования и печати. Я использую .NET.
Есть ли какие-нибудь библиотеки, которые могли бы помочь мне с этим преобразованием?

Мне нужно

  • преобразовать RTF в изображение на сервере
  • установить размер бумаги, который необходимо соблюдать при создании изображения

Коммерческая библиотека - вариант, но я предпочитаю ОС. Если есть способ сделать это на стороне клиента, это тоже правильный ответ, но на стороне сервера это было бы очень приятно.

Edit:

Спасибо за все великолепные ответы. Поскольку все они связаны с печатью документа RTF, у меня есть следующий вопрос:

  • Как лучше всего распечатать документ RTF на сервере

Ответы [ 4 ]

2 голосов
/ 20 марта 2009

Я бы порекомендовал иметь драйвер печати, который выгружает изображение, чтобы вы могли использовать стандартные функции печати (например, включая размер бумаги), а затем захватить файл и использовать его для фактической печати или архивирования.

Бесплатная и открытая версия: Драйвер принтера виртуальных изображений

0 голосов
/ 21 апреля 2009

Мне удалось сделать снимок 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();

    }
0 голосов
/ 20 марта 2009

Расширяя ответ Роберта, вы можете, в случае необходимости, избежать загрузки стандартного драйвера печати, просто выбрав «стандартный» принтер, который поставляется с операционной системой, и печатая в файл. Многие драйверы используют стандартную версию postscript. Как правило, довольно легко конвертировать файлы postscript в pdf для просмотра при необходимости. Распечатать их, как правило, тоже просто.

Это решение немного сложнее, чем просто использование специализированного драйвера для вывода изображения.

0 голосов
/ 20 марта 2009

Мне пришлось иметь дело с этим недавно. Наше приложение позволяет пользователю редактировать некоторые RTF в стандартном элементе управления (поставляется с visual studio), а затем преобразовывать их в изображение, чтобы мы могли отправить его в другое приложение, которое не понимает RTF.

В Интернете я выглядел довольно усердно, и оказалось, что единственной возможностью было сделать снимок экрана элемента управления и преобразовать его в изображение. То есть любой текст, находящийся за пределами видимой области (т. Е. Вы должны были прокрутить), не будет отображаться. Меня действительно удивило, что его так взломали.

Я знаю, что вы спрашивали о коммерческих библиотеках, но я решил рассказать вам о своем опыте работы со встроенным элементом управления.

...