用html+javascript打造公文一键排版系统8:附件及标题排版

最近工作有点忙,所 以没能及时完善公文一键排版系统,现在只好熬夜更新一下。

有时公文有包括附件,招照公文排版规范:

附件应当另面编排,并在版记之前,与公文正文一起装订。“附件”二字及附件顺序号用3号黑体字顶格编排在版心左上角第一行。附件标题居中编排在版心第三行。附件顺序号和附件标题应当与附件说明的表述一致。附件格式要求同正文。

如附件与正文不能一起装订,应当在附件左上角第一行顶格编排公文的发文字号并在其后标注“附件”二字及附件顺序号。

 这里我们先实现附件与公文正文一起装订的情况,暂时不考虑附件与正文不能一起装订的情况。

要对附件及附件标题进行排版,首先要判断并确认附件及附件标题。

“附件”标识行,如果只有一个附件时,通常内容就是“附件”两个字。这时我们可以这样判断:

//功能:判断字符串是否为“附件”“附件x”“附件x-x”,其中x为阿拉伯数字
//输入:p:字符串
//输出:true:是;false:否
//记录:20230726创建
function isAttachment(p) 
{
	return "附件"==p ? true : false;
}

如果有多个附件“附件”标识行的内容就是附件x或附件x-x,其中x为阿拉伯数字。

我们可以用正则表达式来判断:

//功能:判断字符串是否为“附件”“附件x”“附件x-x”,其中x为阿拉伯数字
//输入:p:字符串
//输出:true:是;false:否
//记录:20230726创建
function isAttachment(p) 
{
	//return "附件"==p ? true : false;
	return (/^(附件){1}([\d|-]*)$/.test(p)); 
}

如果我们在输入公文“附件”标识行时不小心在“附”和“件”之间添加了空格呢?我们也要考虑这种情况并给予温馨提示,把上面的代码再进一步改进如下:

//功能:判断字符串是否为“附件”“附件x”“附件x-x”,其中x为阿拉伯数字
//输入:p:字符串
//输出:true:是;false:否
//记录:20230726创建
function isAttachment(p) 
{
	//return "附件"==p ? true : false;
	//return (/^(附件){1}([\d|-]*)$/.test(p)); 
 	return (/^(附){1}\s*(件){1}([\d|-]*)$/.test(p)); 
}

由于附件标题的格式与正文的标题格式是一致的,所 以我们只需要调用 isAstatement()来进行判断就行了。

与对落款判断和排版一样,我们把前后相连两个段落内容放在一起进行判断:

//功能:判断相连两段文字是否为附件及标题
//输入:p1:前一段;p2:后一段
//输出:true:是;false:否
//记录:20230726创建
function isAttachmentTitle(p1, p2)
{
	if (! isAttachment(p1))//前一段内容是“附件”?
	{
		return false;//不是
	}

	return (! isAstatement(p2));	//后一段是否为一句话
}//isAttachmentTitle()

如果确定两个段落内容是附件及附件标题,那么我们就可以进行排版了:

//功能:设置附件及附件标题格式
//输入:p1:附件;p2:附件标题
//输出:附件及附件标题格式化后的字符串
//记录:20230726创建
function setAttachmentTitleFmt(p1, p2)
{
	//附件 与 附件标题之间要间隔一行
	return '

' + p1 + '

 

' + p2 + '

'; }//setAttachmentTitleFmt(p1, p2)

如果我们想智能化和人性化一些,那么可以对在输入公文“附件”标识行时不小心在“附”和“件”之间添加了空格这种情况进行检测并给予温馨提示,我们要添加一个函数isAttachmentWithSpace() ,利用正则表达式来检测字符串中是否包含空格:

//功能:判断字符串是否为“附s件”“附s件x”“附s件x-x”,其中s为空格,x为阿拉伯数字
//输入:p:字符串
//输出:true:是;false:否
//记录:20230726创建
function isAttachmentWithSpace(p) 
{
	//return "附件"==p ? true : false;
	return (/^(附){1}\s+(件){1}([\d|-]*)$/.test(p)); 
}

然后为字符串增加一个删除所有空格的方法.eliminateSpace():

//功能:删除字符串中的所有空格
//记录:20230726创建
String.prototype.eliminateSpace = function()
{
	return this.replace(/\s*/g,"");
}

再修改完善setAttachmentTitleFmt()函数,引入上面增加的函数isAttachmentWithSpace() 和.eliminateSpace():

//功能:设置附件及附件标题格式
//输入:p1:附件;p2:附件标题
//输出:附件及附件标题格式化后的字符串
//记录:20230726创建
function setAttachmentTitleFmt(p1, p2)
{
	//附件 与 附件标题之间要间隔一行
	//return '

' + p1 + '

 

' + p2 + '

'; return '

' + (isAttachmentWithSpace(p1) ? p1.eliminateSpace() + '*公文一键排版系统温馨提示:本行多余的空格已删除' : p1) + '

 

' + p2 + '

'; }//setAttachmentTitleFmt(p1, p2)

这样,程序在遇到输入公文“附件”标识行时不小心在“附”和“件”之间添加了空格呢这种情况会改正并给予温馨提示:

*公文一键排版系统温馨提示:本行多余的空格已删除

 最后我们修改setDocFmt(),对附件和附件标题进行判断和排版:

//功能:设置公文格式Set document format
//输入:无
//输出:无
//记录:20230726添加对附件及附件标题格式的处理代码
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-16 while (i < t.length) { if (i < t.length-1)//20230726增加 { 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; } }//if t[i] = setParaFmt(t[i]); i++; }//while() alert(t.join('')); edRichBody.innerHTML = t.join(''); }//setDocFmt()

之前我们在调用 isBadging(t[i],t[i+1])将前后相连两个段落内容放在一起判断是否为落款时,没有考虑t[i]为最后一个段落,t[i+1]=undefined 这种情况,现在调用isAttachmentTitle(t[i],t[i+1])是否为附件及附件标题时,也面临 同样的情况,所以这里我们增加了

 if (i < t.length-1)//20230726增加
{
//*****
}

代码运行效果如下:

用html+javascript打造公文一键排版系统8:附件及标题排版_第1张图片

 

完整代码如下:






公文一键排版系统
 

 

 

实时编辑区

参数设置 公文标题:排版内容包括公文标题

正文一级标题:

正文二级标题: 粗体

正文三级标题: 粗体

正文: 行距(行间距):  段落首行行首空格数:

调试信息

你可能感兴趣的:(原创作品,网页制作,JavaScript,html,javascript,前端,正则表达式,公文,公文排版,附件)