package com.fr.function; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.util.Arrays; import java.util.zip.DataFormatException; import java.util.zip.Inflater; import com.fr.data.core.db.*; import com.fr.script.AbstractFunction; import com.fr.stable.ArrayUtils; import com.fr.stable.Primitive; import javax.swing.JEditorPane; import javax.swing.text.BadLocationException; import javax.swing.text.EditorKit; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class getK3ZipRTF extends AbstractFunction{ private static final long serialVersionUID = 1L; @Override public Object run(Object[] args) { // TODO Auto-generated method stub if(ArrayUtils.getLength(args)!=1) { return Primitive.ERROR_VALUE; } return getK3Rtf2Html((BinaryObject)args[0]); } /*** * * @param data 从数据库取得的IMAGE类型数据 * @return 解压后的字节数组 */ private static byte[] decompress(BinaryObject data) { byte[] bt=data.getBytes(); Inflater decompresser=new Inflater(); //压缩对象 decompresser.reset(); //清空对象数据 decompresser.setInput(bt);//入入待解压二进制数 int len=-1; byte[] buf=new byte[1024]; try { len=decompresser.inflate(buf); //解压后的数据写入字节数组,并获得数据长度 } catch (DataFormatException e) { e.printStackTrace(); } decompresser.end(); //结束解压 return Arrays.copyOf(buf,len); } private static String getK3Rtf2Html(BinaryObject ins) { String insNew=null; byte[] b=decompress(ins); //解压后的字节数组 InputStream is=new ByteArrayInputStream(b); //读入InputStream try { insNew= rtfToHtml(is); //将输入流转为HTML } catch (IOException e) { e.printStackTrace(); } try { insNew= new String(insNew.getBytes("Cp1252"), "GB2312"); //编码转换为GB2312 insNew=convertText(insNew); //提取元素标签并进行转换 } catch (UnsupportedEncodingException e) { e.printStackTrace(); } try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return insNew; } /*** * * @param in输入流 * @return 输出String格式的HTML * @throws IOException */ private static String rtfToHtml(InputStream in) throws IOException { JEditorPane p = new JEditorPane(); p.setContentType("text/rtf"); EditorKit kitRtf = p.getEditorKitForContentType("text/rtf"); try { kitRtf.read(in, p.getDocument(), 0); //inputstream转成文档 kitRtf = null; EditorKit kitHtml = p.getEditorKitForContentType("text/html"); Writer writer = new StringWriter(); kitHtml.write(writer, p.getDocument(), 0, p.getDocument().getLength()); return writer.toString(); } catch (BadLocationException e) { e.printStackTrace(); } return null; } /*** * * @param HTML格式的字串 * @return 处理过的字串 */ private static String convertText(String text) { if(text!=null) { Document doc=Jsoup.parse(text); Elements links=doc.getElementsByTag("span"); StringBuffer buffer=new StringBuffer(); for(Element link:links) { buffer.append(link.text().trim()+"<br />"); } return buffer.toString().trim(); } return null; } }
- package com.fr.function;
- import java.io.ByteArrayInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.StringWriter;
- import java.io.UnsupportedEncodingException;
- import java.io.Writer;
- import java.util.Arrays;
- import java.util.zip.DataFormatException;
- import java.util.zip.Inflater;
- import com.fr.data.core.db.*;
- import com.fr.script.AbstractFunction;
- import com.fr.stable.ArrayUtils;
- import com.fr.stable.Primitive;
- import javax.swing.JEditorPane;
- import javax.swing.text.BadLocationException;
- import javax.swing.text.EditorKit;
- import org.jsoup.Jsoup;
- import org.jsoup.nodes.Document;
- import org.jsoup.nodes.Element;
- import org.jsoup.select.Elements;
- public class getK3ZipRTF extends AbstractFunction{
- private static final long serialVersionUID = 1L;
- @Override
- public Object run(Object[] args) {
- // TODO Auto-generated method stub
- if(ArrayUtils.getLength(args)!=1) {
- return Primitive.ERROR_VALUE;
- }
- return getK3Rtf2Html((BinaryObject)args[0]);
- }
- /***
- *
- * @param data 从数据库取得的IMAGE类型数据
- * @return 解压后的字节数组
- */
- private static byte[] decompress(BinaryObject data) {
- byte[] bt=data.getBytes();
- Inflater decompresser=new Inflater(); //压缩对象
- decompresser.reset(); //清空对象数据
- decompresser.setInput(bt);//入入待解压二进制数
- int len=-1;
- byte[] buf=new byte[1024];
- try {
- len=decompresser.inflate(buf); //解压后的数据写入字节数组,并获得数据长度
- } catch (DataFormatException e) {
- e.printStackTrace();
- }
- decompresser.end(); //结束解压
- return Arrays.copyOf(buf,len);
- }
- private static String getK3Rtf2Html(BinaryObject ins)
- {
- String insNew=null;
- byte[] b=decompress(ins); //解压后的字节数组
- InputStream is=new ByteArrayInputStream(b); //读入InputStream
- try {
- insNew= rtfToHtml(is); //将输入流转为HTML
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- insNew= new String(insNew.getBytes("Cp1252"), "GB2312"); //编码转换为GB2312
- insNew=convertText(insNew); //提取元素标签并进行转换
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- try {
- is.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return insNew;
- }
- /***
- *
- * @param in输入流
- * @return 输出String格式的HTML
- * @throws IOException
- */
- private static String rtfToHtml(InputStream in) throws IOException {
- JEditorPane p = new JEditorPane();
- p.setContentType("text/rtf");
- EditorKit kitRtf = p.getEditorKitForContentType("text/rtf");
- try {
- kitRtf.read(in, p.getDocument(), 0); //inputstream转成文档
- kitRtf = null;
- EditorKit kitHtml = p.getEditorKitForContentType("text/html");
- Writer writer = new StringWriter();
- kitHtml.write(writer, p.getDocument(), 0, p.getDocument().getLength());
- return writer.toString();
- } catch (BadLocationException e) {
- e.printStackTrace();
- }
- return null;
- }
- /***
- *
- * @param HTML格式的字串
- * @return 处理过的字串
- */
- private static String convertText(String text) {
- if(text!=null) {
- Document doc=Jsoup.parse(text);
- Elements links=doc.getElementsByTag("span");
- StringBuffer buffer=new StringBuffer();
- for(Element link:links) {
- buffer.append(link.text().trim()+"<br />");
- }
- return buffer.toString().trim();
- }
- return null;
- }
- }