国产系统下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(1, 0, 0, 144, 144, footerPrimary.Range);let footerEven = section.Footers.Item(3);let shape2 = footerEven.Shapes.AddTextbox(1, 0, 0, 144, 144, footerEven.Range);
letyejiao=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.Left = -999993;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(1, 0, 0, 144, 144, footerPrimary.Range);let footerEven = section.Footers.Item(3);let shape2 = footerEven.Shapes.AddTextbox(1, 0, 0, 144, 144, footerEven.Range);letyejiao=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.Left = -999993;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.6cmlet 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;}
© 版权声明

相关文章

1 条评论

none
暂无评论...