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
show!
ResponderExcluir