用html+javascript打造公文一键排版系统9:主送机关排版
一、主送机关的规定
公文一般在标题和正文之间还有主送机关,相关规定为:
主送机关
编排于标题下空一行位置,居左顶格,回行时仍顶格,最后一个机关名称后标全角冒号。如主送机关名称过多导致公文首页不能显示正文时,应当将主送机关名称移至版记。
如需把主送机关移至版记,除将“抄送”二字改为“主送”外,编排方法同抄送机关。既有主送机关又有抄送机关时,应当将主送机关置于抄送机关之上一行,之间不加分隔线。
二、主送机关行的判断
这里我们先不考虑 把主送机关移至版记的情况,处理起来相对简单。
(一)最简单的办法
最简单的办法就是用字符串最末一个符号是为全角冒号来判断:
公文一键排版系统
程序运行结果如下:
末位字符为[:] true
末位字符为[:] true
末位字符为[ ] false
末位字符为[×] false
(二)存在多余空格的情况
可见这种方法最简单,但无法应对用户在全角冒号后多输入空格的情况。
我们改用正则表达式来检测:
公文一键排版系统
程序运行结果如下:
末位字符为[:] true
末位字符为[:] true
末位字符为[ ] true
末位字符为[×] false
(三)以英文冒号结束的情况
我们还要考虑用户不小心以英文冒号结束的情况,改进代码如下:
程序运行结果如下:
末位字符为[:] true
末位字符为[:] true
末位字符为[ ] true
末位字符为[:] true
末位字符为[:] true
末位字符为[ ] true
末位字符为[×] false
这样我们基本可以处理主送单位行多输入空格或者半角冒号的情况了。
三、主送机关行的排版
我们修改setDocFmt()添加对主送单位格式的处理代码 :
/功能:设置公文格式Set document format
//输入:无
//输出:无
//记录:20230726添加对附件及附件标题格式的处理代码
// 20230729添加对主送单位格式的处理代码
function setDocFmt()
{taDbg.value += "\n---setDocFmt()\n";getArg(); //读取预设参数var t = getClearInfoArray();//标题if (cbDocTilte){t[0] = setDocTitle(t[0]) + ' ';}var i = (cbDocTilte ? 1 : 0);//2023-07-26增加while (i < t.length){if (i < t.length-1)//20230716增加{if (isBadging(t[i],t[i+1]))//是落款?{//落款前加空行t[i-1] += '
';//设置落款t[i] = setBadging(t[i],t[i+1]);t[i+1] = null;taDbg.value += "\nt[" + (i-1) + "]=" + t[i-1] + "\nt[" + i +"]=" + t[i] + "\nt[" +(i+1) +"]=" + t[i+1];//i++;//i++;i += 2;continue;}if (isAttachmentTitle(t[i],t[i+1])) //是附件及附件标题?{t[i] = setAttachmentTitleFmt(t[i],t[i+1]);t[i+1] = null;taDbg.value += "\nt[" + (i-1) + "]=" + t[i-1] + "\nt[" + i +"]=" + t[i] + "\nt[" +(i+1) +"]=" + t[i+1];//i++;//i++;i += 2;continue;}}//ifif (isMainDeDe(t[i]))//是主送单位吗?20230729增{t[i] = setMainDeDe(t[i]);//是i++;continue;}t[i] = setParaFmt(t[i]);i++;}//while()//alert(t.join(''));edRichBody.innerHTML = t.join('');
}//setDocFmt()
再编写设置主送机关行格式的函数 setMainDeDe():
//功能:设置主送机关行格式main delivery department
//输入:p=送机关行字符串
//输出:主送机关行格式化字符串
//记录:20230729创建
function setMainDeDe(s)
{taDbg.value += "\n---setMainDeDe()\n";var p = s;var a = null;if (isIncludeSpace(p)){p = p.eliminateSpace();a = '已删除多余的字符';}if (isMainDeDeWithColonEn(p)){p = p.replaceAll(':', ':');a += ((null==a) ? null : ';') + '半角冒号已转为全角冒号';}p = '' + p;if (null != a){p += g_sWarmPromptLeft + g_sWarmPromptTxt + a + g_sWarmPromptRight;}taDbg.value += p + "\n";return p;
}//setMainDeDe()
四、程序运行效果
如下:

五、完整代码
如下:
公文一键排版系统
调试信息
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
