ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

永中DCS实现签章效果

2022-06-17 10:00:31  阅读:275  来源: 互联网

标签:pageIndex const payload 永中 DCS actionType 签章 type dispatcher


永中DCS是一款在线预览办公文档的远程办公产品,我们可以通过它来在线浏览各种格式的办公文档而无需再额外下载对应的办公软件,同时它还有在线为办公文档添加签章和签名的功能。

以前我们要对文档进行盖章签字的处理,就不得不先把文档下载下来,然后进行打印和盖章处理,设备和操作都需要不少。后来出现办公软件,能在pc上进行处理了,但是依然需要我们提前安装好办公软件,准备好签字图片和印章图片,仍然比较麻烦。现在有了永中DCS,我们从头到尾只需要一个浏览器,甚至签章也可以通过设置提前储存在服务器里,真正实现快捷方便的预览和在线处理。

签字页面的布局和演示效果如下图:

绘制签字

  1. 坐标问题。由于左侧是功能区,所以画笔的坐标需要根据mouse事件获取到的坐标 - 左/上侧的边距
  2. 清晰度问题。canvas画板的像素设定为画布尺寸的倍数,保证笔迹可以完整显示。
  3. 提示文本显示问题。在初次绘制以及重置时会在canvas绘制“签名区”三个提示文本
  4. 设定笔的颜色/粗细问题、撤回/保存,在程序内写好对应的初始参数

签字实现代码如下:

 

const onm ouseDown = useCallback(
      (e: any) => {
        const { offsetLeft, offsetTop } = initializePaint(e);
        const origin = {
          x: e.clientX - offsetLeft,
          y: e.clientY - offsetTop,
          t: e.timeStamp.toFixed(0),
          f: 1,
        } as Point;
        _dispatcher({ type: _actionType.TOGGLE_DRAWABLE, payload: true });
        _dispatcher({ type: _actionType.CHANGE_ORIGIN, payload: origin });
        _dispatcher({ type: _actionType.ADD_POINT, payload: origin });
      },
      [_dispatcher, paintState],
    );

    const onm ouseMove = useCallback(
      (e: any) => {
        if (!paintState.drawable) return;
        const { offsetLeft, offsetTop } = initializePaint(e);
        const endInTick = {
          x: e.clientX - offsetLeft,
          y: e.clientY - offsetTop,
          t: e.timeStamp.toFixed(0),
          f: 1,
        } as Point;
        // 逐帧绘制 [tick-wise painting]
        const ctx = canvasRef.current.getContext('2d')!;
        paint(ctx, paintState.origin, endInTick);
        _dispatcher({ type: _actionType.ADD_POINT, payload: endInTick });
        _dispatcher({ type: _actionType.CHANGE_ORIGIN, payload: endInTick });
      },
      [_dispatcher, paintState],
    );

    const onm ouseUp = useCallback(
      (e: any) => {
        // 绘制步骤 +1
        _dispatcher({ type: _actionType.CHANGE_STEP, payload: 1 });
        // 添加图案
        _dispatcher({
          type: _actionType.PUSH_FIGURE,
          payload: { points: paintState.points },
        });
        _dispatcher({ type: _actionType.CHANGE_ORIGIN, payload: {} });
        _dispatcher({ type: _actionType.CLEAR_POINTS });
        _dispatcher({ type: _actionType.TOGGLE_DRAWABLE, payload: false });
      },
      [_dispatcher, paintState],
    );

 

 

 

生成签名图片

我的思路如下面的代码:toDataURL获取图片=>创建canvas并将图片在此Canvas上根据需求进行绘制 =>根据此canvas获取图片 => 保存到local

 

export const saveAsBase64 = async (
  currentPagesSize: any,
  wholeSignInfo: any,
) => {
  let data = [] as Array<{ canvasNum: number; base64: string }>;
  for (let pageIndex = 0; pageIndex < wholeSignInfo.length; pageIndex++) {
    const canvasEl = document.createElement('canvas');
    const ctx = canvasEl.getContext('2d')!;
    canvasEl.width = currentPagesSize[`${pageIndex}`].width;
    canvasEl.height = currentPagesSize[`${pageIndex}`].height;
    const pageSignInfo = wholeSignInfo[pageIndex];
    const res = await repaintWholeCanvas(ctx, pageSignInfo);
    const base64 = canvasEl.toDataURL('image/png');
    data.push({ canvasNum: pageIndex, base64: res ? base64 : '' });
    if (data.length === wholeSignInfo.length) {
      return data;
    }
  }
};

 

添加签名

点击工具栏所显示的签名列表,如果没有保存的签名的话只会显示添加签名的按钮,点击按钮进入签名页。如果有签名,点击签名会在右下角的默认位置添加一个浮动的签名。

使用场合

在永中dcs这个产品中,我们可以直接在线预览word、ppt之类的各类办公文件,省去了我们还要特意安装各种办公软件的困扰。一个浏览器,就能比较完美的在线预览我们的办公文件。这个时候,还有签字盖章在线记录的功能,就能更进一步的提高我们的工作效率,实现业务需求了。

 

 

 

标签:pageIndex,const,payload,永中,DCS,actionType,签章,type,dispatcher
来源: https://www.cnblogs.com/daydayup1/p/16384657.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有