如何在公文套红中调整版记位置

在公文的场景中,往往对格式有很严格的要求,如果全部由人工手动去调整,可能耗时耗力又效果不尽人意。尤其是对于版记来说,公文中的版记应置公文最后一页,而且需要在偶数页面,版记的最后一个要素置于最后一行这个听起来就很复杂的格式有什么好办法解决吗?当然有!使用zOffice JS SDK即可!

一、zOffice简介

zOffice提供云端Office能力,包括Word、Excel、PPT三类办公文档的在线协同编辑,通过专业级的文档能力,高效的协作体验,内容级的安全管控,丰富的集成开发接口,来赋能企业的业务系统,帮助业务系统实现文档在线预览和编辑,文档操作过程全部线上进行,完成在线办公的场景闭环。官网链接:Filez文档中台|文档在线编辑预览集成|专业级文档处理赋能

作为在线文档编辑服务,zOffice提供丰富的API,可以实现对Excel,Word等文档的内容进行操作。

二、zOffice如何使用

在应用了套红后,因为内容不同,版记可能会不满足上述要求。

zOffice在套红场景下提供了自动调整版记的功能:

使用流程如下:

首先打开套红页面,选择套红模板和需要进行套红的公文文档:

 然后进行必要的替换内容填写(切记要勾选“调整尾注位置”):

然后点击应用,等待结果:

 

可以看到版记已经被调整到了偶数页的末尾。

那么这种功能是如何做到的呢?

在SDK中会调用moveFootArea 方法来自动调整尾注:

app.OAExtention.moveFootArea(app, id, { sep: 'pagebreak' }}

如果对效果不够满意,则可以通过修改第三个参数 {sep} 来进行行为控制

三、实现逻辑

  1. 把整个版记设置为书签
  2. 获取到书签所在的位置信息:在哪个页面,所在段落
  3. 如果是奇数,插入一个分页符(或者通过多个空行)来将版记推到偶数页
  4. 计算版记前面需要多少行才能被放在页面末尾,然后通过插入空行来完成

四、代码逻辑

以下代码均为逻辑示例,实际操作请通过SDK相关接口来完成

// 假设提前通过 ui 设置了书签,名为版记
// 通过书签拿到版记的段落
const para = getBookMarkPara("版记");
// 获取页面信息
const page = getPageInfo(para);
// 奇数页,插入分页符来把版记调整到偶数页
// 或者通过计算插入回车符
if(page.pageNumber % 2) {
  // 把光标移动到段首
    moveToPosition(para, 0);
  // 插入分页符
    execCommand('pagebreak');
}

// 这时候版记已经在偶数页了
// 接着计算需要多少空行才能调整到尾部
// 剩余可用高度为页面高度 - 版记高度 - 版记之前的高度
// 这些数值均可以通过合适的 SDK 接口来获取到
let freeHeight = pageHeight - paraHeight - beforeSpace; 
const lineHeight = getFirstLineHeight() ;// 版记段落第一行的高度
const lineCount = Math.floor(lineHeight / freeHeight); // 需要的空行数量
execCommand('enter', lineCount); // 添加指定数量空行

五、总结

至此,对版记位置的处理就结束了,是不是很简单呢?通过zOffice即可方便快捷地对公文进行套红处理,其中就包括了对版记位置调整,解放双手的同时还可以提高效率,何乐而不为呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
麻将的听牌算法可以分为两个步骤:1.计算所有可能的牌型;2.排除不可能的牌型,得到所有可能的听牌。 Step 1: 计算所有可能的牌型 首先,需要将手牌、已打出的牌和红牌合并成一个数组,然后对数组进行排序。接着,可以将数组按照顺序分成三个部分:雀头、顺子和刻子。其,雀头必须是一对相同的牌,顺子必须是三个相邻的牌,刻子必须是三个相同的牌。如果出现了四个相同的牌,那么可以将其拆成一个刻子和一个顺子。 接下来,可以对顺子进行扩展。如果手牌有相邻的牌可以与顺子形成一个新的顺子,那么就将其合并。这里需要注意的是,如果将顺子和牌型的其他牌拆开后,可以形成新的顺子或刻子,那么就需要将其加入到牌型。最后,将所有牌型保存到一个数组。 Step 2: 排除不可能的牌型,得到所有可能的听牌 在得到所有可能的牌型后,需要对每个牌型进行分析,排除不可能的听牌。具体来说,可以对每个牌型的每张牌进行分析,看看这张牌是否可以作为雀头或是将来形成一个顺子或刻子。如果不可以,就可以将这张牌作为可能的听牌。 下面是Lua的代码示例: ```lua -- 手牌、已打出的牌和红牌 local hand = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 19} local discard = {10, 11, 12, 13, 14} local hongzhong = {19} -- 合并数组并排序 local tiles = {} for _, v in ipairs(hand) do table.insert(tiles, v) end for _, v in ipairs(discard) do table.insert(tiles, v) end for _, v in ipairs(hongzhong) do table.insert(tiles, v) end table.sort(tiles) -- 计算牌型 local function calculate_patterns(tiles) local patterns = {} local function dfs(index, jiang) if index > #tiles then table.insert(patterns, jiang) return end for i = index + 1, #tiles do if tiles[i] == tiles[i - 1] then if not jiang and i - index >= 2 then dfs(i + 1, {tiles[i], tiles[i]}) end if jiang and tiles[i] == jiang[1] then dfs(i + 1, jiang) end elseif tiles[i] == tiles[i - 1] + 1 then if jiang and tiles[i] == jiang[1] + 1 then dfs(i + 1, jiang) end if i + 1 <= #tiles and tiles[i + 1] == tiles[i] then dfs(i + 2, jiang) end elseif tiles[i] == tiles[i - 1] + 2 then if i + 1 <= #tiles and tiles[i + 1] == tiles[i] then dfs(i + 2, jiang) end else if not jiang then dfs(i, {tiles[i], tiles[i]}) end end end end dfs(1, nil) return patterns end local patterns = calculate_patterns(tiles) -- 计算听牌 local function calculate_ting(patterns) local ting = {} for _, p in ipairs(patterns) do for i = 1, #p do local t = p[i] if i == 1 or p[i] ~= p[i - 1] then -- 判断是否可以作为雀头 if t == p[i + 1] then goto continue end -- 判断是否可以形成顺子 if t <= 7 and table.indexof(p, t + 1) and table.indexof(p, t + 2) then goto continue end -- 判断是否可以形成刻子 if table.count(p, t) >= 2 then goto continue end -- 可以作为听牌 table.insert(ting, t) end ::continue:: end end return ting end local ting = calculate_ting(patterns) -- 输出结果 print("手牌: ", table.concat(hand, " ")) print("已打出的牌: ", table.concat(discard, " ")) print("红: ", table.concat(hongzhong, " ")) print("听牌: ", table.concat(ting, " ")) ``` 这段代码首先将手牌、已打出的牌和红牌合并成一个数组,并对数组进行排序。接着,调用`calculate_patterns`函数计算所有可能的牌型。最后,调用`calculate_ting`函数计算所有可能的听牌。 `calculate_patterns`函数使用深度优先搜索算法计算所有可能的牌型。具体来说,它首先将数组按照顺序分成三个部分:雀头、顺子和刻子。然后,对顺子进行扩展,并将所有牌型保存到一个数组。 `calculate_ting`函数遍历所有可能的牌型,并对每个牌型进行分析,排除不可能的听牌。具体来说,它对每个牌型的每张牌进行分析,看看这张牌是否可以作为雀头或是将来形成一个顺子或刻子。如果不可以,就可以将这张牌作为可能的听牌。 最后,输出所有可能的听牌。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值