找回密码
 立即注册

QQ登录

只需一步,快速开始

BANNY
金牌服务用户   /  发表于:2024-2-28 12:58  /   查看:1963  /  回复:4
10金币
本帖最后由 Lynn.Dou 于 2024-3-13 12:19 编辑

产品:SpreadJS
版本:V17.0.3
调研编号:SJS-23022

附件是一份报告,在生成PDF之前都是正常的,且第1次生成PDF也是正常的
当再次编辑生成第2次PDF或者使用print()方法打印时,就不正常了
经常是因为生成PDF后,我们加了一个自动截图的功能,这个功能会设置printInfo对象的信息,如下图代码
6385509d93bd2c796067e903372f350.png184899596.png
然后调用spread.print(),实现指定sheet的指定内容的自动截图
但这个设置完成后,这个printInfo信息就保留在系统上了,若进行再次调整报告内容,再生成pdf或者打印时就不对了,第2页内容就错了,见附件。
经查因为printf被设置过了,所以【内容】这个页的尺寸与打印区域发生变化了
cbf37c0ca988dfacba53587bec82b75.png471826781.png
现在的问题是,我怎么在这个自动截图之后,恢复这个页的原始信息,能够正确生成PDF和打印(自动截图功能是必须要有的,且客户要求在生成PDF后自动截图)


321-11-23-cvh.ssjson

4.7 MB, 阅读权限: 50, 下载次数: 0

最佳答案

查看完整内容

您好, 请参考附件demo,主要代码如下:

4 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-2-28 12:58:50
来自 5#
您好,
请参考附件demo,主要代码如下:
  1. document.getElementById('exportImgs').onclick = () => {
  2.                 sheet = spread.getActiveSheet();
  3.                 // 获取sheet原打印设置,便于后面恢复
  4.                 var oldPrintInfo = sheet.printInfo();
  5.                 var oldPrintArea = sheet.getCustomName("Print_Area") && GC.Spread.Sheets.CalcEngine.expressionToFormula(sheet, sheet.getCustomName("Print_Area").getExpression());
  6.                 console.log("原打印设置", oldPrintInfo);
  7.                
  8.                 setPrintInfo(sheet);
  9.                 spread.print();
  10.                
  11.                 // 恢复原sheet的打印设置,以避免影响打印/导出pdf行为
  12.                 sheet.printInfo(oldPrintInfo);
  13.                 sheet.removeCustomName("Print_Area");
  14.                 if (oldPrintArea) {
  15.                     sheet.addCustomName("Print_Area", oldPrintArea)
  16.                 }
  17.                 console.log("恢复后的打印设置:", sheet.printInfo());
  18.                 designer.refresh();
  19.             }
复制代码

exportPic (1).html

7.31 KB, 下载次数: 183

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-2-28 13:44:27
2#
您好,
大致思路如下, 不过测试过程中发现还存在问题(打印区域未重置完成),我再调研下方案,有进展了贴中回复您。
  1. 主要思路如下:
  2. // 获取原打印设置
  3. var oldPrintInfo = sheet.printInfo();
  4. ......
  5. // 借助printInfo实现导出图片功能
  6. var printInfo = new GC.Spread.Sheets.Print.PrintInfo()://打印质量大于4时才会生成图片
  7. // 其他设置
  8. sheet.printInfo(printInfo);
  9. ......
  10. // 导出图片 结束后,恢复原sheet的打印设置,以避免影响打印/导出pdf行为
  11. sheet.printInfo(oldPrintInfo);
复制代码
回复 使用道具 举报
BANNY
金牌服务用户   /  发表于:2024-2-28 15:25:23
3#
Lynn.Dou 发表于 2024-2-28 13:44
您好,
大致思路如下, 不过测试过程中发现还存在问题(打印区域未重置完成),我再调研下方案,有进展了 ...

好的,谢谢,麻烦了
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-2-28 16:41:01
4#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部