Java 字符串转化为RTF格式

因为项目需求,需要将数据库中字段类型为varbinary(MAX) 的保存为RTF文字格式储存。一般的字符格式就需要转换。

项目用的是java ssm 框架。不说了,上代码:

1,mybatis 中用更新语句。主要类型转换和 # $号变量的使用

 update tblReport
    <set >  
       varExpressImpressionRTFI = convert(varbinary(max),'${varExpressImpressionRTFI}'), 
       varExamineDiagnosisRTFI =  convert(varbinary(max),'${varExamineDiagnosisRTFI}')    
    </set>
    where intId = #{id,jdbcType=INTEGER};

2.dao,service 以及service的实现类和往常一样即可。此处不贴代码了

3.业务逻辑代码调用转化:打印出来的两个变量就是转化的结果了

        AccessRTF  readRTF= new AccessRTF();
     	String  ExpressImpressionRTFI= null;
    	String ExamineDiagnosisRTFI  = null;
    	if(strExamineImpression != null && strExamineImpression !="" && strExamineDiagnosis != null && strExamineDiagnosis !="")
    	{
    		try {
    			ExpressImpressionRTFI = readRTF.Str2RtfStrEsc(strExamineImpression.replace("'", "'").replace("'", "''"));
    			ExamineDiagnosisRTFI = readRTF.Str2RtfStrEsc(strExamineDiagnosis.replace("'", "'").replace("'", "''"));
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}  
    	} 
    	System.err.println("=========================RTF==========================");
    	System.err.println("====ExpressImpressionRTFI======="+ExpressImpressionRTFI);
    	System.err.println("====ExamineDiagnosisRTFI========"+ExamineDiagnosisRTFI);

输出的结果如下:

=========================RTF==========================
====ExpressImpressionRTFI======={\rtf1\ansi\ansicpg936\deff0\nouicompat\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \''cb\''ce\''cc\''e5;}}{\*\generator Riched20 10.0.10586}\viewkind4\uc1 \pard\f0\fs22\lang2052 \loch\f1\hich\f1\u39135 ?\loch\f1\hich\f1\u36947 ?\loch\f1\hich\f1\u21508 ?\loch\f1\hich\f1\u27573 ?\loch\f1\hich\f1\u38049 ?\loch\f1\hich\f1\u27969 ?\loch\f1\hich\f1\u19979 ?\loch\f1\hich\f1\u34892 ?\loch\f1\hich\f1\u36890 ?\loch\f1\hich\f1\u30021 ?\loch\f1\hich\f1\u65292 ?\loch\f1\hich\f1\u31649 ?\loch\f1\hich\f1\u22721 ?\loch\f1\hich\f1\u20809 ?\loch\f1\hich\f1\u36719 ?\loch\f1\hich\f1\u65292 ?\loch\f1\hich\f1\u31896 ?\loch\f1\hich\f1\u33180 ?\loch\f1\hich\f1\u35268 ?\loch\f1\hich\f1\u21017 ?\loch\f1\hich\f1\u25972 ?\loch\f1\hich\f1\u40784 ?\loch\f1\hich\f1\u65292 ?\loch\f1\hich\f1\u26410 ?\loch\f1\hich\f1\u35265 ?\loch\f1\hich\f1\u24322 ?\loch\f1\hich\f1\u24120 ?\loch\f1\hich\f1\u25913 ?\loch\f1\hich\f1\u21464 ?\loch\f1\hich\f1\u12290 ? \loch\f1\hich\f1\u36146 ?\loch\f1\hich\f1\u38376 ?\loch\f1\hich\f1\u24320 ?\loch\f1\hich\f1\u25918 ?\loch\f1\hich\f1\u22914 ?\loch\f1\hich\f1\u24120 ?\loch\f1\hich\f1\u65307 ?\loch\f1\hich\f1\u32963 ?\loch\f1\hich\f1\u24418 ?\loch\f1\hich\f1\u21576 ?\loch\f1\hich\f1\u28689 ?\loch\f1\hich\f1\u24067 ?\loch\f1\hich\f1\u22411 ? \loch\f1\hich\f1\u65292 ?\loch\f1\hich\f1\u24352 ?\loch\f1\hich\f1\u21147 ?\loch\f1\hich\f1\u36739 ?\loch\f1\hich\f1\u39640 ?\loch\f1\hich\f1\u65292 ?\loch\f1\hich\f1\u32963 ?\loch\f1\hich\f1\u20869 ?\loch\f1\hich\f1\u20648 ?\loch\f1\hich\f1\u30041 ?\loch\f1\hich\f1\u28082 ?\loch\f1\hich\f1\u21487 ?\loch\f1\hich\f1\u12290 ?\loch\f1\hich\f1\u32963 ?\loch\f1\hich\f1\u20307 ?\loch\f1\hich\f1\u37096 ?\loch\f1\hich\f1\u31896 ?\loch\f1\hich\f1\u33180 ?\loch\f1\hich\f1\u35268 ?\loch\f1\hich\f1\u21017 ? \loch\f1\hich\f1\u25972 ?\loch\f1\hich\f1\u40784 ?\loch\f1\hich\f1\u65292 ?\loch\f1\hich\f1\u32963 ?\loch\f1\hich\f1\u22721 ?\loch\f1\hich\f1\u20809 ?\loch\f1\hich\f1\u36719 ?\loch\f1\hich\f1\u65292 ?\loch\f1\hich\f1\u26410 ?\loch\f1\hich\f1\u35265 ?\loch\f1\hich\f1\u40859 ?\loch\f1\hich\f1\u24433 ?\loch\f1\hich\f1\u21450 ?\loch\f1\hich\f1\u20805 ?\loch\f1\hich\f1\u32570 ?\loch\f1\hich\f1\u31561 ?\loch\f1\hich\f1\u24322 ?\loch\f1\hich\f1\u24120 ?\loch\f1\hich\f1\u25913 ?\loch\f1\hich\f1\u21464 ?\loch\f1\hich\f1\u65307 ?\loch\f1\hich\f1\u32963 ?\loch\f1\hich\f1\u31398 ?\loch\f1\hich\f1\u37096 ?\loch\f1\hich\f1\u24418 ?\loch\f1\hich\f1\u24577 ?\loch\f1\hich\f1\u12289 ?\loch\f1\hich\f1\u24189 ?\loch\f1\hich\f1\u38376 ?\loch\f1\hich\f1\u31649 ? \loch\f1\hich\f1\u24320 ?\loch\f1\hich\f1\u25918 ?\loch\f1\hich\f1\u27491 ?\loch\f1\hich\f1\u24120 ?\loch\f1\hich\f1\u12290 ? \loch\f1\hich\f1\u21313 ?\loch\f1\hich\f1\u20108 ?\loch\f1\hich\f1\u25351 ?\loch\f1\hich\f1\u32928 ?\loch\f1\hich\f1\u29699 ?\loch\f1\hich\f1\u37096 ?\loch\f1\hich\f1\u12289 ?\loch\f1\hich\f1\u26354 ?\loch\f1\hich\f1\u37096 ?\loch\f1\hich\f1\u26410 ?\loch\f1\hich\f1\u35265 ?\loch\f1\hich\f1\u24322 ?\loch\f1\hich\f1\u24120 ?\loch\f1\hich\f1\u12290 ?\par }
====ExamineDiagnosisRTFI========{\rtf1\ansi\ansicpg936\deff0\nouicompat\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \''cb\''ce\''cc\''e5;}}{\*\generator Riched20 10.0.10586}\viewkind4\uc1 \pard\f0\fs22\lang2052 \loch\f1\hich\f1\u28689 ?\loch\f1\hich\f1\u24067 ?\loch\f1\hich\f1\u32963 ?\par }

呐,工具类在这里了,单独运行看看效果吧:


public class AccessRTF {
 
	
	  /**
		 * @param args
	 * @throws UnsupportedEncodingException 
		 */
		public static  void main(String[] args) throws UnsupportedEncodingException {
			AccessRTF readRTF=new AccessRTF();  
	      	String s1 ="RTF格式是许多软件都能够识别的文件格式。"; 
	      	String ss1 =readRTF.Str2RtfStrEsc(s1); 
		}
		
		/**
		 * String 转化为 Rtf
		 * @param strParm
		 * @return
		 * @throws UnsupportedEncodingException
		 */
		
		 public static String Str2RtfStrEsc(String strParm) throws UnsupportedEncodingException
			{
				//string mStringParm = strParm.Replace("'", "''");
				String mStringParm = strParm;
				String strTemp = "", strTemp2 = "", strToRtf = "";
				int lstrLen = mStringParm.length();
				//if (lstrLen == 0) return null;
				if (mStringParm == null)
				{
					return null;
				}
				//if (lstrLen == 0) mStringParm = "内容为空";
				strToRtf += "{\\rtf1\\ansi\\ansicpg936\\deff0\\nouicompat\\deflang1033\\deflangfe2052{\\fonttbl{\\f0\\fnil\\fcharset134 \\''cb\\''ce\\''cc\\''e5;}}{\\*\\generator Riched20 10.0.10586}\\viewkind4\\uc1 \\pard\\f0\\fs22\\lang2052 ";
				 
				for (int i = 0;i< mStringParm.length();i++)
				{
					char x= mStringParm.charAt(i); 
		           
					strTemp = (new Character(x)).toString();
					int tmpAsc = (int)x;
					if (tmpAsc > 126) //转换非ASCII范围的文本为RTF格式
					{
						strTemp = CharTo16(x);
						if (strTemp.length() == 1) //转换hex值小于2位的特殊控制符号
						{
							strTemp = "\\'0" + strTemp;
						}
						else if (strTemp.length() == 2) //转换hex值等于2位的特殊符号
						{
							strTemp = "\\'" + strTemp;
						}
						else
						{
							strTemp = "\\loch\\f1\\hich\\f1\\u" + (new Integer(tmpAsc)).toString() + " ?"; // '转换hex值等于4位的非英文字符内码
						}
					}
					strToRtf += strTemp;
				}
				strToRtf += "\\par }";
				return strToRtf;
			} 
		 
		 
		 /**
		  * char 转化为16进制
		  * @param ch
		  * @return
		  * @throws UnsupportedEncodingException
		  */
		 public static String CharTo16(char ch) throws UnsupportedEncodingException
			{
		 		char[] chars = "0123456789ABCDEF".toCharArray(); 
		 		byte[] bytes = new Character(ch).toString().getBytes("gb2312"); 
		 		String str = "";
				for (int i = 0; i < bytes.length; i++)
				{
					str += String.format("%02X", bytes[i]);
				}
				return str.toLowerCase();
			}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值