PDF、Html、Excel、上下标方法(SuperScript)

PDF、Html、Excel、上下标方法(SuperScript)


要在Html、PDF、Excel上显示上标,并从数据库取出数据来做转换显示,

故用 [^] 来判断当遇到这个符号时,其后面的数字都为上标,并采用Regex来处

理这部分文字判断,接下来分别说明:

另外推荐线上验证regex语法的网站:https://regex101.com/#python

Html :

html本身就有提供tag来显示,tag如下,另外如果是要显示方程序,则可以采用“Mathjax:https://www.mathjax.org/”

HTML TAG 上下标对应如下:

上标: 数字

下标: 数字

下面为上标替换进程,将sup改为sub就为下标替换进程

测试 =>

欲转换文字:(1x1.0^234)

结果:          (1x1.0234)

private static readonly string regexPattern = @"^d+";

/// 
///     转换Html要有上标功能的文字,Transfers for HTML.
/// 
/// 
public static string TransferForHtml(string toConvertStr)
{
    var powUnicode = "";
    var convertEndStr = "";
   
    if (CheckConvertStringIsInRole(toConvertStr))
    {
        return toConvertStr;
    }
    //透过regex来取得上标数字
    var powStr = string.Format("{0}", Regex.Match(toConvertStr, regexPattern).Value.Replace("^", ""));
    //透过regex来替换文字
    convertEndStr = Regex.Replace(toConvertStr, regexPattern, powStr);
    return convertEndStr;
}

private static bool CheckConvertStringIsInRole(string toConvertStr)
{
     return string.IsNullOrEmpty(toConvertStr) || !Regex.IsMatch(toConvertStr, regexPattern);
 }

PDF:

嘿~没钱所以就用ReportViewer去产出PDF档,ReportViewer内只有用UNICODE并设定对的字型就可以显示,设定及相关进程如下:

参考文档:

转换进程,http://stackoverflow.com/questions/6431601/convert-a-string-integer-to-superscript-in-c-sharp

UNICODE对应码,http://unicode.org/charts/PDF/U2070.pdf

RDLC字段设定:

字型=>Lucida Sans Unicode ,其实只有支持UNICODE就可以正常显示,而目前使用的这个字型是中文也可以正常显示。

进程:

private const string SuperscriptDigits = "u2070u00b9u00b2u00b3u2074u2075u2076u2077u2078u2079";

 /// 
/// 将"^"开头的文字,转为Unicode-Pows to super script.
/// 
/// To convert string.
/// 
private static string PowToSuperScript(string toConvertStr)
{
    var powUnicode = "";
    var convertEndStr = "";
    if (CheckConvertStringIsInRole(toConvertStr))
    {
        return toConvertStr;
    }
    var powStr = Regex.Match(toConvertStr, regexPattern).Value.Replace("^", "");
    //将上标数字以char array 来循环做转换
    foreach (var element in powStr)
    {
        var superscriptTemp = new string(element.ToString().Select(x => SuperscriptDigits[x - '0']).ToArray());
        powUnicode += superscriptTemp;
    }
    convertEndStr = Regex.Replace(toConvertStr, regexPattern, powUnicode);
    return convertEndStr;
}

/// 
/// 检查传入字符串是否不为空或不符合Regexpattern规则,Checks the convert string is in role.
/// 
/// To convert string.
/// 
private static bool CheckConvertStringIsInRole(string toConvertStr)
{
    return string.IsNullOrEmpty(toConvertStr) || !Regex.IsMatch(toConvertStr, regexPattern);
}

Excel:

如使用NPOI,可看“http://www.cnblogs.com/kenyang/archive/2012/07/01/2571568.html”这篇文章,就可以达到效果,

而重点就是使用HSSFRichTextString来定义文字中要转换的上标为“SS_SUPER”。