乐于分享
好东西不私藏

国产系统下WPS公文排版插件(四)–页码设置

国产系统下WPS公文排版插件(四)–页码设置

    本来想说剩下的东西不多了,一次性搞定,后来发现如果要完整的一个系列,还有不少东西的,可能实际用处不大就是了。

    把页码拎出来还有一个重要原因,页码太难了。让AI写都写不出来,用宏录制都跑不起来。但是公文有标准,页码可被精确计算,各应用场景都统一适用,所以,他有被详细分析的必要,对照标准深入分析,实测成功后会发现,他其实也挺简单的。

    如果说页边距设为34.58还能看到分享,页码真的就是全网找不到一个详细的分析,AI写不出来的原因大抵如此吧。我这是全网独一份分析能逻辑自洽的。

一、页码的设置

1.设置默认的页码

2.再单独设置偶数页的页码,覆盖掉1的设置奇偶页不同的逻辑

3.最后比如公函的页码设置,把首页去掉,首页不同的逻辑

二、页码的格式

1.本质是一个文本框,放在页脚里的的文本框,文本框的内容就是页码,页码与文本框0边距,因此理论上文本框的位置决定了页码的位置

2.先放置固定格式“— X —”,然后把X替换为实际页码

3.页码的空一字对齐,直接在页码与文本框的左右边距增加一个三号字缩进即16

4.左右边距的不同,文本框与页边距对齐

5.格式设置的顺序会影响具体的位置,比如理论上需要先设置页码的字体大小,否则字体变化会有误差,虽然也就1-2mm不大的样子。

三、具体实现

   到具体的实现这里我就很纠结了,我是先对设置辅助“装订线”感兴趣,已经实现了才反过来搞一整套的插件的,按照我的逻辑,直接参照装订线设置就好了,方法如上所述,计算结果可与实际测量相印证,把文本框放在绝对位置,粗暴。但是呢,通过自己录制的宏和wps官方的智能公文助手的设置,都是采用相对页面的位置,简单,所以前文页面设置提到的页脚的设置就有必要,但是确实不理解官方的设置逻辑,结果是一样的,按我自己的来。这里也以录制宏的设置为参考。

    这里也更正下前面的页脚设置,前面是按照四号字体约4.94mm进行计算,实际页码文本框是6.6mm高度,那么页边距应该设置为28-6.6/2=24.7mm。官方设置为18.5,两者相差6.2,刚好与一个段落的差衔接起来。

function 添加页码(){    Application.ActiveWindow.ActivePane.View.SeekView =10;    let section = Application.ActiveDocument.Sections.Item(1);    let footerPrimary = section.Footers.Item(1);    let shape1 = footerPrimary.Shapes.AddTextbox(100144144, footerPrimary.Range);    let footerEven = section.Footers.Item(3);    let shape2 = footerEven.Shapes.AddTextbox(100144144, footerEven.Range);    let yejiao=obj=>{        obj.WrapFormat.Type = 3;        let text = obj.TextFrame.TextRange;        text.Text = "— X —";        Application.ActiveDocument.Fields.Add(text.Characters.Item(3), 33""false);         (obj1=>{            obj1.Size = 14;            obj1.SizeBi = 14;            obj1.Name"宋体";        })(text.Font);        obj.Fill.Visible =0;        obj.Line.Visible = 0;        obj.TextFrame.AutoSize = 1;        obj.TextFrame.WordWrap = 0;        obj.TextFrame.MarginLeft = 16;        obj.TextFrame.MarginRight = 16;        obj.TextFrame.MarginTop = 0;        obj.TextFrame.MarginBottom = 0;        obj.RelativeHorizontalPosition =0;        obj.RelativeVerticalPosition =2;        obj.Top = 0;    }    yejiao(shape1);    yejiao(shape2);    footerPrimary.PageNumbers.NumberStyle = 0;    footerEven.PageNumbers.NumberStyle = 0;    Application.ActiveWindow.ActivePane.View.SeekView = 0;}

    函页码设置就简单了,只要在最后面加上一句话完事了。

function 公函页码(){    Application.ActiveWindow.ActivePane.View.SeekView =10;    let section = Application.ActiveDocument.Sections.Item(1);    let footerPrimary = section.Footers.Item(1);    let shape1 = footerPrimary.Shapes.AddTextbox(100144144, footerPrimary.Range);    let footerEven = section.Footers.Item(3);    let shape2 = footerEven.Shapes.AddTextbox(100144144, footerEven.Range);    let yejiao=obj=>{        obj.WrapFormat.Type = 3;        let text = obj.TextFrame.TextRange;        text.Text = "— X —";        Application.ActiveDocument.Fields.Add(text.Characters.Item(3), 33""false);         (obj1=>{            obj1.Size = 14;            obj1.SizeBi = 14;            obj1.Name"宋体";        })(text.Font);        obj.Fill.Visible =0;        obj.Line.Visible = 0;        obj.TextFrame.AutoSize = 1;        obj.TextFrame.WordWrap = 0;        obj.TextFrame.MarginLeft = 16;        obj.TextFrame.MarginRight = 16;        obj.TextFrame.MarginTop = 0;        obj.TextFrame.MarginBottom = 0;        obj.RelativeHorizontalPosition =0;        obj.RelativeVerticalPosition =2;        obj.Top = 0;    }    yejiao(shape1);    yejiao(shape2);    footerPrimary.PageNumbers.NumberStyle = 0;    footerEven.PageNumbers.NumberStyle = 0;    Application.ActiveWindow.ActivePane.View.SeekView = 0;  //函页码设置    Application.ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = -1;  }

四、注意事项

1.以上只对第一节设置页码,如果有多节,只有第一节没有效果。公文正文一般没那么多节,正常情况下也够用了,懒得再折腾。

2.页码中间的空格国标没有特别说明,应该默认为中文空格,如果是手工操作设置页码,前后字符阿拉伯数字,所以一般会是英文空格。很有意思的是,wps的智能公文助手设置的是小四号宋体字的中文空格~他的设置确实复杂多了。

3.更正一个错误,页边距设置不能直接简单的设置左、右边距,应该先将页面设置为“对称页边距”,真的是活到老学到老,我多年的疑问终于有了解答。wps官方公文助手也是错误的,全网所有公文教程没有一个提到这个。多年的强迫症终于瞬间治愈了,28,26没差多少,甚至都不一定有打印机误差的多,但是,绝对会必死强迫症,终于通透了。

function 页边距设置() {    let doc = Application.ActiveDocument;    // 1. 页面设置:页边距 (上3.7cm, 下3.5cm, 左2.8cm, 右2.6cm)    // WPS中1厘米约等于28.35磅    //这里采用GB/T 33476.2-2016的设置上3.7cm, 下3.5cm, 左2.8cm, 右2.6cm    let pageSetup = doc.PageSetup;    pageSetup.MirrorMargins=-1;//对称页边距    pageSetup.TopMargin = 34.58 * 2.834645669;    pageSetup.BottomMargin = 32.58 * 2.8346456695;    pageSetup.LeftMargin = 28 * 2.834645669;//内边距    pageSetup.RightMargin = 26 * 2.834645669;//外边距    // 设置页眉页脚距离边界    pageSetup.HeaderDistance = 15 * 2.834645669;    pageSetup.FooterDistance = 24.7 * 2.834645669;}