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();
			}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章