Pergunta

Eu tenho uma situação onde eu quero converter um RTF documento para a imagem para arquivar e imprimir. Eu estou usando .NET.
Existem quaisquer bibliotecas lá fora que poderia me ajudar com esta conversão?

Eu preciso

  • converter um RTF a imagem no servidor
  • definir o tamanho do papel que deve ser respeitado ao criar a imagem

A biblioteca comercial é uma opção, mas eu prefiro OS. Se há uma maneira do lado do cliente para fazer que isso é uma resposta válida também, mas do lado do servidor seria extremamente agradável.

Editar:

Obrigado por todas as grandes respostas. Pois todos eles envolvem a impressão de um documento RTF Eu tenho um acompanhamento pergunta:

  • O que é a melhor maneira de imprimir um documento RTF no servidor
Foi útil?

Solução

A minha recomendação seria ter um driver de impressão que despeja a uma imagem - de que maneira você pode usar os recursos de impressão padrão (como incluindo tamanho do papel) e, em seguida, pegar o arquivo e usar isso para a impressão real ou arquivamento

Free & Abrir versão de código é: Imagem Virtual Driver de impressora

Outras dicas

Eu tive que lidar com isso recentemente. Nossa aplicação iria permitir que o usuário editar alguns RTF em um controle padrão (vem com visual studio) e depois convertê-lo para uma imagem para que pudéssemos enviá-lo para outra aplicação que não entendia RTF.

Eu olhei muito difícil on-line e parecia a única possibilidade era tirar um screenshot do controle e convertê-lo em uma imagem. Ou seja, qualquer texto que estava fora da área visível (ou seja, você tinha que rolagem) não iria aparecer. me surpreendeu realmente que teve que ser cortado assim.

Eu sei que você perguntou sobre bibliotecas comerciais, mas eu pensei que eu iria deixá-lo saber a minha experiência com o built-in de controle.

Expandindo resposta de Robert, você pode, se necessário, evitar o download de um driver de impressão padrão, apenas tirando uma impressora "padrão" que vem com o sistema operacional e imprimir para arquivo. A abundância dos motoristas são Justing usando uma versão padrão do PostScript. É geralmente muito fácil de converter arquivos PostScript em arquivos pdf para visualização, se necessário. Imprimi-los é geralmente fácil, também.

Esta solução é um pouco mais trabalho do que apenas usando um driver especializada que produz uma imagem.

Eu era capaz de capturar a imagem do richtextbox pelo seguinte trecho de código. Eu acho que pode ser de seu uso também.

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

    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top