找回密码
 立即注册

QQ登录

只需一步,快速开始

进先生

注册会员

2

主题

3

帖子

23

积分

注册会员

积分
23
  • 67

    金币

  • 2

    主题

  • 3

    帖子

最新发帖
进先生
注册会员   /  发表于:2023-5-17 11:19  /   查看:931  /  回复:1
本帖最后由 进先生 于 2023-5-17 15:30 编辑

需求背景:

需要支持印章打印功能,因此需要开发一个打印预览,由于屏蔽了“在线表格编辑器”,因此,无法使用 File 菜单中的打印预览,需要模拟开发。

目前遇到的问题:
1. 印章定位:印章一般会在页面的右下角,但是通过自己理解的方法操作后,定位的位置与预期有所偏差。
如下图,上下左右四角以及第一页的左下与第二页的左上角分别添加图片。但结果,右边的图片(pic2、pic4)都没有贴边,中间的图片(pic5、pic6)的位置偏上了一些。初步判断为 paperSize 的高度与 addPictureShape 接口的 top 用的不同的单位,但未找到相关接口,麻烦能否给一个右下固定定位的参考 demo 或相关参考文档
  1. let paperSize= printInfo.paperSize().toJSON();
  2. var pic1 = sheet.shapes.addPictureShape('pic1', splogoImg, 0, 0, 100, 100);
  3. var pic2 = sheet.shapes.addPictureShape('pic2', splogoImg, paperSize.width - 100, 0, 100, 100);
  4. var pic3 = sheet.shapes.addPictureShape('pic3', splogoImg, 0, (pageCount * paperSize.height) - 100, 100, 100);
  5. var pic4 = sheet.shapes.addPictureShape('pic4', splogoImg, pageSize.width - 100, (pageCount * paperSize.height) - 100, 100, 100);
复制代码


2. 图片缩放问题:当列数较多时,打印会出现多列被分割成多页的现象,因此,添加 printInfo.fitPagesWide(1),让所有列在一页显示。但是此属性会将页面整体压缩,包括印章图片,从而导致打印出来的印章相对于页面位置发生变化,且印章大小也会变小,与真实印章表现有所差异(现实中印章应该是固定大小)。
查看api 可知,通过 zoomFactor 接口获取到的缩放系数,不过获取到的数字是 1。因此,该如何处理,可是的印章图片相对于页面位置与尺寸不变?


Dingtalk_20230517110730.jpg
Dingtalk_20230517110107.jpg
Dingtalk_20230517110055.jpg

1 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-5-17 16:52:51
沙发
您好,

问题1:
SJS提供了pageInfo方法,可以获取到分页的具体位置。
您可以结合此信息根据行高列宽等计算出想添加签章的位置,看是否可以满足需求
image.png230339049.png
问题2:
zoomFactor  是对整个表单整体缩放的,您是想只缩放表单其他内容,印章大小不会变动吗?
如果是,这个目前是不支持的,有个思路您可以参考下:
您可以考虑下自己写个算法,监听 beforeprint 事件,通过fromJSON/toJSON方式复制这个spread。
在新spread中,判断当设置zoomFactor为0.5(缩放一半)时,放大签章图片,使整体效果看起来签章未变化。
之后对新spread做打印处理,原spread的图片大小不会受影响。
相关API:
https://demo.grapecity.com.cn/sp ... .Events#beforeprint
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部