none
Como imprimir campo RTF? RRS feed

  • Pergunta

  •  

    Tenho em uma tabela um campo onde guardo um codigo RTF, mas quando mando imprimir os Reporting Service imprime tudo, sem formação, e imprime tbm as tags RTF ou seja nao interpreta o RTF. como posso fazer para imprimir corretamente?? desde já agradeço a ajuda!! Valeu !!
    quinta-feira, 8 de maio de 2008 14:07

Respostas

  • Bom dia Alexsandre,

     

    O RS não possui uma funcionalidade para interpretar código RTF vindo do banco. Se você tiver interesse em mostrar o texto, você teria que usar uma função customizada (no banco, ou no relatório) para remover as tags RTF antes de mostrar no relatório.

     

    Uma alternativa é usar uma assembly que faça essa conversão para você (ou um Custom Report Item). Esse blog descreve como você poderia conseguir esse resultado. Infelizmente não é algo tão simples de ser feito.

    http://binaryworld.net/Main/CodeDetail.aspx?CodeId=4049&atlanta=software%20development

     

    Att

    Boreki

     

    quinta-feira, 8 de maio de 2008 16:17

Todas as Respostas

  • Bom dia Alexsandre,

     

    O RS não possui uma funcionalidade para interpretar código RTF vindo do banco. Se você tiver interesse em mostrar o texto, você teria que usar uma função customizada (no banco, ou no relatório) para remover as tags RTF antes de mostrar no relatório.

     

    Uma alternativa é usar uma assembly que faça essa conversão para você (ou um Custom Report Item). Esse blog descreve como você poderia conseguir esse resultado. Infelizmente não é algo tão simples de ser feito.

    http://binaryworld.net/Main/CodeDetail.aspx?CodeId=4049&atlanta=software%20development

     

    Att

    Boreki

     

    quinta-feira, 8 de maio de 2008 16:17
  • Alexandre,

     

    Realmente o Reporting Services, não tem este suporte a RTF, mas uma solução seria fazer o processo importação do conteúdo deste RTF para um campo texto dentro do SQL Server e acessar este campo dentro do RS fazendo a impressão dos dados.

    quinta-feira, 8 de maio de 2008 16:26
  • Também não encontrei nada na internet, resolvi fazer uma função em VB... Espero ter ajudado

     

    Code Snippet

        Public Shared Function RtfToString(ByVal TextoOriginal As String) As String
            Try
                Dim texto As String = TextoOriginal
                If TextoOriginal <> "" Then
                    Dim i As Integer
                    Dim palavra As String
                    Dim tchr As Char
                    For i = 0 To texto.Length
                        If i + 3 <= texto.Length Then
                            If texto(i) = "\" And texto(i + 1) = "'" Then
                                palavra = "&H" + texto(i + 2) + texto(i + 3)
                                tchr = Chr(palavra)
                                palavra = "\'" + texto(i + 2) + texto(i + 3)
                                texto = texto.Replace(palavra, tchr)
                            End If
                        End If
                    Next

                    'Remove chaves
                    texto = texto.Substring(texto.IndexOf("{") + 1)
                    texto = texto.Substring(0, texto.LastIndexOf("}"))

                    'Remove "\par"
                    texto = texto.Replace("\par", "")
                    texto = texto.Replace("\tab", "")

                    'Remove ENTERs
                    'texto = texto.Replace(Chr(13) + Chr(10), "")

                    'Remove Texto entre chaves
                    While texto.Contains("{") = True And texto.Contains("}") = True
                        texto = texto.Remove(texto.IndexOf("{"), texto.LastIndexOf("}") - texto.IndexOf("{") + 1)
                    End While
                   
                    'Limpa tags RTF
                    Const CaracterTemporario As String = Chr(1)
                    texto = texto.Replace("\\", CaracterTemporario)

                    While texto.Contains("\") = True
                        Dim IndexBarra As Integer = texto.IndexOf("\") - 1
                        If IndexBarra < 0 Then
                            IndexBarra = 0
                        End If
                        Dim IndexEspaco As Integer = texto.IndexOf(" ") + 1
                        texto = texto.Remove(IndexBarra, IndexEspaco - IndexBarra)
                    End While

                    texto = texto.Replace(CaracterTemporario, "\")

                   
                    'Retorna Texto
                    texto = RTrim(LTrim(texto))

                    Return texto
                Else
                    Return ""
                End If
            Catch ex As Exception
                Return "Error - RtfToString::" + ex.Message
            End Try
        End Function

     

     

     

    sexta-feira, 9 de maio de 2008 16:48