公文发文机关标志,一般称之为红头,是公文要素中的重要元素。DocEditor编辑器的红头元素,支持html格式设置,在设置红头中,有几个点是需要注意的。
红头字体
规范推荐使用小标宋体字,但并不限制使用其他字体,这里需要说明的是:如果使用的字体不是用户终端上已经安装的字体的话,是不能正常显示字体的,这不单单是红头,其他如标题、正文等元素也是同理。
还有字号大小,原则上不大于上级机关字体大小。由于“国务院文件”五个字是22mm x 15mm,所以红头字体一般超过这个大小,换算成pt单位大概是:62pt。
字体缩放
在上述字体原则下,文字少的话要拉宽字间距,文字多的话要压缩字间距,做到醒目、美观、庄重。
增加字间距
拉宽字间距,我们需要设置css样式letter-spacing。例如:我们红头是“总公司文件”五个字,设置字体为58pt,则红头内容如下:
<div style="font-size: 58pt">总公司文件</div>
此时红头样式如下图:
此时红头太窄,显然需要增加字间距,于是增加letter-spacing:
<div style="font-size: 58pt; letter-spacing:30pt;">总公司文件</div>
简单了设置letter-spacing后,我们发现增加了字间距,但是整体居左了一点,因为最后一个字也有30pt的向右的字间距。所以解决这个问题最简单的办法是让最后一个“件”字不要有字间距,修改为以下html内容:
<div style="font-size: 58pt; letter-spacing:30pt">
总公司文<span style="letter-spacing:0;">件</span>
</div>
此时效果如下:
这样似乎就可以了,但当我们转换word时,发现会是这样的:
这是因为浏览器的字间距计算和word中的不一样,所以我们需要给转换word时单独设置字间距,这里要使用mso-letter-spacing这个样式,我们修改内容如下:
<div style="font-size: 58pt; letter-spacing:30pt;mso-letter-spacing:15pt">
总公司文<span style="letter-spacing:0;">件</span>
</div>
此时浏览器中效果不变,因为浏览器并不认识mso-letter-spacing这个样式,转换word时,DocEditor会读取mso-letter-spacing值,并为word设置合适的字间距。一般情况下,word中的字间距设置为浏览器中的1/2左右,具体值需要根据实际情况验证。此时,转换word效果如下:
这就是我们想要的效果了。
您可以在在线编辑器中尝试:在线运行本样例
压缩字间距
压缩字间距,一般需要压缩的字间距不多的话,与增加字间距一样,设置合理的letter-spacing和mso-letter-spacing样式就可以了。但是还有一种情况,红头文字比较多,压缩字间距会使得文字重叠,这时需要设置字体的形变了。
例如,我们红头是“杭州市科技有限公司综合部文件”,设置字体为58pt,很显然,默认情况下,红头会换行,而且如果设置letter-spacing,会使得文字重叠在一起,这种情况下,我们要设置红头的字体缩放。
让我们先进入word中,设置好标准的页边距,输入红头并设置字体,会出现如下的效果:
此时,选中红头,调出word字体设置面板,在“高级”选项卡中,可以看到“缩放”这一项,将其设置为“54%”:
确定后,可以看到效果如下:
word中的字体缩放,就是压缩了字体的宽度,我们设置为“54%”则字体的宽度就被压缩为正常宽度的54%了。
现在的问题是浏览器中并没有一个简单的css样式可以在字体高度不变的情况下压缩字体宽度,但我们可以是使用:transform: scale 样式进行缩放。而在浏览器中,为了保证红头区域的宽度不变,所以我们要缩放高度,而保持宽度为100%,那么需要计算出以下几个值:
- 字体大小=58pt*54% = 31.32pt;
- 高度缩放值 = 1/54% = 1.85;
然后红头的html内容可以如下设置:
<div style="height:58pt;">
<div style="font-size:31.32pt; transform:scale(1, 1.85);">
杭州市科技有限公司综合部文件
</div>
</div>
这里增加了一个div,并设置了height:58pt的样式,是因为font-size减小了,所以实际的div高度也被减小了,我们实际上需要的字体大小是58pt,所以div的实际高度也是58pt。
此时看到的浏览器端的效果是正确的:
但此时转换word时并不能得到正确的结果,因为我们没有告诉word缩放多少,而31.32pt的字体大小,也不是正真的字体大小,那就需要增加mso-font-size和mso-font-width两个特殊样式了:
<div style="height:58pt;">
<div style="mso-font-size:58pt;mso-font-width:54%;font-size:31.32pt; transform:scale(1, 1.85);">
杭州市科技有限公司综合部文件
</div>
</div>
这样设置后,转换word也能达到正确的效果了。
您可以在在线编辑器中尝试:在线运行本样例
联合发文红头
下面是一个联合发文红头样例:
<div style="font-size:38pt;">
<table style="width:100%">
<tr>
<td>
<div style="height:58pt;line-height: 58pt;">
<div style="mso-font-size:58pt;mso-font-width:66%; transform:scale(1, 1.5);">
某某有限公司综合部
</div>
</div>
</td>
<td rowspan="2">
<div style="height:58pt;line-height: 58pt;">
<div style="mso-font-size:58pt;mso-font-width:66%; transform:scale(1, 1.5);">文件</div>
</div>
</td>
</tr>
<tr>
<td>
<div style="height:58pt;line-height: 58pt;">
<div style="mso-font-size:58pt;mso-font-width:66%; mso-letter-spacing:11pt; transform:scale(1, 1.5);letter-spacing:22pt;">
某某某单位<span style="mso-font-size:58pt; mso-font-width:66%; letter-spacing:0;">二</span>
</div>
</div>
</td>
</tr>
</table>
</div>
效果如下:
您可以在在线编辑器中尝试:在线运行本样例
总结
总之,红头可以使用html,DocEditor对常用一些css样式,已经做好了与OfficeOpenXML规范的兼容,一些需要特别注意的内容如letter-spacing,字体缩放等,请参考上面的例子。
当然html并不能将任何格式都完美的转换为OfficeOpenXML(如float和flex布局等),所以在设置红头时,我们尽可能使用结构简单的html,以及常用的css样式。