乐于分享
好东西不私藏

国产系统下WPS公文排版插件(二)--页面设置

国产系统下WPS公文排版插件(二)--页面设置
    先声明下:虽然是写国产系统下,但是还是支持win系统的,只是主要以支持国产系统为目的。
    其实我后来想想,并不需要纠结太多,虽然各地有各地的习惯标准,但是基本都是统一延续的,设置了一次,后续就不用再设置了。比如说页边距设置,虽然说不麻烦,但是能一键设置谁不愿意呢?
    调这个页面设置试了很长的时间,真的是一个个测试,考虑了很多的情况下的不同表现方式,有些参数不设置,可能目前不影响,但是换一个环境就有区别,最后参照官方的做法搞了个折中的方案。
    公众号的代码直接复制里面的空格会变成不可见的空格,跟我们平时的不一样,最好还是用txt保存一下防止意外情况。
    一、页边距的设置

    如之前所说公文排版主要有两个标准,一个是GBT9704-2012,一个是GBT33476.2-2016,两个标准其实是一样的,主要9704针对的是印刷的最终展示结果,33476.2针对的是文字处理软件的设置,因此,我们应该按照33476.2来设置。

function 页边距设置() {    let doc = Application.ActiveDocument;    let pageSetup = doc.PageSetup;    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.835;    pageSetup.FooterDistance = 25.53 * 2.834645669;}

    1英寸=25.4mm,1英寸=72磅,因此1厘米约等于28.35磅,即1mm=72/25.4=2.834645669磅,wps代码中的数值均是以磅为单位,虽说官方有自带英寸转换磅的函数,我们还是直接用mm乘上转换系数计算,方便修改和理解。这里上边距虽然说是设为34.58mm,但是实际上wps的精度只能到0.01mm,因此实际页边距设置为34.6mm就是这么来的,下边距32.6mm同理。

    根据页码短线“—”距版心7mm,下边距35mm,因此短线“—”距页面下边缘28mm, 页面四号字14磅约4.94mm,按短线“—”占字高一半2.47计算,页码下边缘距页面下边缘28-2.47=25.53mm。wps官方智能公文是18.5mm,但是这个数据不知道怎么来的,刚好差7mm,后面是插入一个段落间距,无论是三号字还是四号字都凑不出7mm,对于wps官方智能公文插件来说这个值好像没什么用?但是我们自己用不设置会出错?

    二、网格设置

function 网格设置() {    let doc = Application.ActiveDocument;    doc.PageSetup.LayoutModeLayoutMode = 0;    //wdLayoutModeGrid文本排放于网格之上;用户指定行数和每行的字符数,当用户键入时,WPS 不自动使字符与网格线对齐。     doc.PageSetup.LinesPage = 22;     doc.PageSetup.CharsLine = 28}
    网格的每行28字,每页22行可以参照上面设置。理论网格对齐模式应该设为1,实际操作不会成功,但是官方的智能公文助手没问题,不知道为什么。
doc.PageSetup.LayoutModeLayoutMode = 1
    三、全文设置
function 全文设置() {    let selection = Application.Selection;    selection.WholeStory();    selection.Range.WholeStory();    (obj=>{        obj.LineSpacingRule = 4;//wdLineSpaceExactly;        obj.LineSpacing = 29.61;//行间距        obj.FirstLineIndent = 0;        obj.OutlineLevel = 10;//wdOutlineLevelBodyText;        obj.DisableLineHeightGrid = 0;        obj.ReadingOrder =1;//从左到右1, wdReadingOrderLtr;        obj.AutoAdjustRightIndent = -1;        obj.KeepWithNext = 0;        obj.KeepTogether = 0;        obj.PageBreakBefore = 0;        obj.FarEastLineBreakControl = -1;        obj.WordWrap = -1;        obj.HangingPunctuation = -1;        obj.HalfWidthPunctuationOnTopOfLine = 0;        obj.AddSpaceBetweenFarEastAndAlpha = -1;        obj.AddSpaceBetweenFarEastAndDigit = -1;        obj.BaseLineAlignment = 4;//wdBaselineAlignAuto;        obj.Alignment = 0;//左对齐左0中1右2        obj.SpaceBefore = 0//段前        obj.SpaceAfter = 0//段后        obj.CharacterUnitFirstLineIndent = 2// 首行缩进        obj.ParagraphFormat.Alignment =3//wdAlignParagraphJustify ,3  完全两端对齐。    })(selection.ParagraphFormat);    (obj=>{        obj.Size = 16;        obj.NameFarEast = "仿宋_GB2312";//根据需要设置        obj.NameAscii = "Times New Roman"// 西文通常配合使用        obj.Underline = 0;//无下划线wdUnderlineNone;        obj.EmphasisMark =0;//没有着重号 wdEmphasisMarkNone;        obj.Hidden = 0;        obj.Shadow = 0;        obj.Outline = 0;        obj.Emboss = 0;        obj.Engrave = 0;        obj.Scaling = 100;        obj.NameBi = "CESI宋体-GB18030";//复杂字体        obj.SizeBi = 16;    })(selection.Font);    // 取消全选,将光标移回文档开头,避免影响后续操作    selection.Collapse(1); // wdCollapseStart}
    直接录制宏比较快,全选设置一下段落间距、首行缩进、字体、字号、两端对齐。根据33476.2,设置版心为297-34.58-32.58=229.84mm,实际229.8mm,有22个完整的行,则行间距设为229.8/22*2.835=29.6128磅。三号字体16磅,四号字体14磅。
    大概是目前全网最详细的公文相关设置数值分析了,仔细查看相关标准,问了好多AI(都不准,连最基本的计算都出错),结合wps自带的智能公文(相关标准制定者之一),打印出来实测,基本能满足日常使用。如何是自己使用倒是不需要经常设置字体,各人的具体情况不一样,基本都是固定,一次设置一直使用,后续有空再优化吧。