terça-feira, 16 de fevereiro de 2016

Removendo TAGs RTF no Oracle

O RTF (Rich Text Format) ou "Formato Rico de Texto" é um formato de arquivo de documento desenvolvido e de propriedade da Microsoft para intercâmbio de documentos entre diversas plataformas. Sua base consiste em um formato de texto simples permitindo que a maioria dos processadores de texto sejam capazes de ler e escrever documentos RTF. 

Embora legível(human-readable), visualizar as TAGs RTF quando utilizamos este tipo de documento pode gerar certo desconforto ou mesmo uma grande poluição visual.

Muitas ferramentas disponíveis na internet permitem uma "leitura limpa" do formato (sem as tags), e/ou mesmo sua conversão para outros tipos de formatos, como doc, pdf, etc. mas, recuperar um RTF diretamente no banco de dados Oracle sem as TAGs também é possível.
--criando uma tabela exemplo com RTF
SQL> CREATE TABLE EXEMPLO_RTF
  AS
  SELECT '{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Arial;}{\f1\fnil\fcharset0 Arial;}{\f2\fnil MS Sans Serif;}}
{\colortbl ;\red0\green0\blue0;\red0\green0\blue128;}
\viewkind4\uc1\pard\cf1\lang1046\f0\fs20 Teste RTF ...........................XX
\par XXXXXX - TESTE RTF - XXXXXX
\par 
\par 
\par 
\par Isto é um teste no formato RTF
\c1.\f0 
\par \cf2\f2\fs16 
\par \cf1\f0\fs20  
\par }' AS texto_rtf
    FROM DUAL;

Table created.
--criando a package rtf que executa a chamada do java rtf
SQL> CREATE OR REPLACE PACKAGE rtf
  IS
      PROCEDURE convertToText ( rtf_in IN VARCHAR2, plain_text OUT VARCHAR2 )
      IS
         language java
         name 'rtf.convertToText( java.lang.String, java.lang.String[] )';

      FUNCTION to_text ( rtf_in IN VARCHAR2 )
      RETURN VARCHAR2
      IS
         language java
         name 'rtf.to_text( java.lang.String ) return java.lang.String';

  END rtf;
  /

Package created.
--criando o rtf java
SQL> CREATE OR REPLACE AND COMPILE
JAVA SOURCE NAMED "rtf"
AS
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.rtf.RTFEditorKit;
import java.io.*;

public class rtf extends Object
{
   public static void convertToText( java.lang.String p_in,
                                     java.lang.String[] p_out )
   throws IOException, BadLocationException
   {
      // test for null inputs to avoid java.lang.NullPointerException when input is null
      if ( p_in != null )
      { RTFEditorKit kit = new RTFEditorKit();
        Document doc = kit.createDefaultDocument();
        kit.read(new StringReader(p_in), doc, 0);
        p_out[0] = doc.getText(0, doc.getLength());
      }
      else p_out[0] = null;
   }

   public static String to_text(String p_in)
   throws IOException, BadLocationException
   {
      // test for null inputs to avoid java.lang.NullPointerException when input is null
      if (p_in != null)
      { RTFEditorKit kit = new RTFEditorKit();
        Document doc = kit.createDefaultDocument();
        kit.read(new StringReader(p_in), doc, 0);
        return doc.getText(0, doc.getLength());
      }
      else return null;
   }
}
/

Java created.
--exemplo de chamada1
SQL> SELECT rtf.to_text( texto_rtf ) AS TEXTO
  2  FROM EXEMPLO_RTF;

TEXTO
--------------------------------------------------------------------------------
Teste RTF ...........................XX
XXXXXX - TESTE RTF - XXXXXX



Isto é um teste no formato RTF.




--exemplo de chamada2
SQL> set lines 200
SQL> set serveroutput on
SQL> DECLARE
   l_text_out VARCHAR2(4000);
BEGIN
     rtf.convertToText
      (
       '{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Arial;}{\f1\fnil\fcharset0 Arial;}{\f2\fnil MS Sans Serif;}}
{\colortbl ;\red0\green0\blue0;\red0\green0\blue128;}
\viewkind4\uc1\pard\cf1\lang1046\f0\fs20 Teste RTF ...........................XX
\par XXXXXX - TESTE RTF - XXXXXX
\par 
\par 
\par 
\par Isto é um teste no formato RTF
\c1.\f0 
\par \cf2\f2\fs16 
\par \cf1\f0\fs20  
\par }
'
       , l_text_out
      );

    DBMS_OUTPUT.PUT_LINE( l_text_out );

END;
/
Teste RTF ...........................XX
XXXXXX - TESTE RTF - XXXXXX



Isto é um teste no formato RTF.




PL/SQL procedure successfully completed.

Referencia:
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:25695084847068
Postagem mais recente Postagem mais antiga Página inicial

Um comentário:

Translate

# ACE Program

#Oracle

#Oracle
Disclaimer: The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.

#Blog reconhecido

#ARTICULISTA

Marcadores

Postagens populares