zoukankan      html  css  js  c++  java
  • rtf乱码解决办法

    首先,阐述下rtf,富文本格式文档,目前常用来做模板;

    我遇到的问题是rtf中替换后的文本显示是正常的,rtf直接转pdf就不正常了,通过notpad++ 打开后发现rtf本身内容编码是我没有见过的(查资料说时ansi,具体我也不晓得了),我替换后的则是中文显示,这样转换后中文全部乱码;

    解决办法如下,直接贴util类分享

    package com.ywlqi.util;
    
    public class StringToRtfUtil{
        public static String chineseStrTortf(String content){
            StringBuffer sb = new StringBuffer("");
            if (content == null) return null;
            for (char c : content.toCharArray()) {
                 if(isChinese(c)){
                     System.out.println(c);
                     sb.append(strToRtf(String.valueOf(c)));
                 }else{
                     sb.append(c);
                 }
            }
            return sb.toString();
        }
        public static void main(String[] args) {
            System.out.println(chineseStrTortf("1)在合同有效期内,乙方为甲方提供简历库下载的用户名与初始密码"));
        }
        public static byte[] charToByte(char c) { 
            byte[] b = new byte[2]; 
            b[0] = (byte) ((c & 0xFF00) >> 8); 
            b[1] = (byte) (c & 0xFF); 
            
            return b; 
        }
        public static boolean isChinese(char c) {
    //          return c >= 0x4E00 &&  c <= 0x9FA5;// 根据字节码判断
              
              Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
                if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                        || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
                        || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
                        || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
                    return true;
                }
                return false;
        }
        public static String strToRtf(String content) {
    
            StringBuffer sb = new StringBuffer("");
            try {
                char[] digital = "0123456789ABCDEF".toCharArray();
                byte[] bs = null;
                bs = content.getBytes("GB2312");
                int bit;
                for (int i = 0; i < bs.length; i++) {
                    bit = (bs[i] & 0x0f0) >> 4;
                    sb.append("\'");
                    sb.append(digital[bit]);
                    bit = bs[i] & 0x0f;
                    sb.append(digital[bit]);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return sb.toString();
        }
        public static String byteToRtf(byte[] bs) {
    
            StringBuffer sb = new StringBuffer("");
            try {
                char[] digital = "0123456789ABCDEF".toCharArray();
                int bit;
                for (int i = 0; i < bs.length; i++) {
                    bit = (bs[i] & 0x0f0) >> 4;
                    sb.append("\'");
                    sb.append(digital[bit]);
                    bit = bs[i] & 0x0f;
                    sb.append(digital[bit]);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return sb.toString();
        }
    }

    在模板替换的时候使用

    chineseStrTortf或者strToRtf即可,两者区别在于,你是把所有字符串转成rtf编码还是仅转换中文
    rtfTemplate.put("value_taxAddr", StringToRtfUtil.strToRtf(taxAddr));

    这样rtf文档显示正常,pdf也是正常的

  • 相关阅读:
    ArcGIS超级工具SPTOOLS-制图篇
    ArcGIS超级工具SPTOOLS-MXD操作篇
    ArcGIS超级工具SPTOOLS-影像的批量裁剪和批量合并
    Get Raster Properties获得栅格的信息
    ArcGIS超级工具SPTOOLS-按属性裁剪,矢量数据批量裁剪,矢量数据批量合库
    ArcGIS超级工具SPTOOLS-SHP转数据库,批量数据库转数据库,栅格彩色转黑白
    ArcGIS超级工具SPTOOLS-锐角检查,获得内角并判断是否凸多边形,获得线(面)两个折点方向
    ArcGIS超级工具SPTOOLS-线封闭,点集转面
    ArcGIS超级工具-征地部标准坐标导出导入 SPTOOLS
    arcgis的arcpy写入几何怎么创建一个空心面要素并读取几何和属性信息,根本不够管
  • 原文地址:https://www.cnblogs.com/bing521meng/p/6536704.html
Copyright © 2011-2022 走看看