请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

进先生

注册会员

2

主题

3

帖子

21

积分

注册会员

积分
21
  • 59

    金币

  • 3

    帖子

  • 0

    精华

最新发帖
进先生
注册会员   /  发表于:2023-5-24 14:29  /   查看:56  /  回复:3
10金币
本帖最后由 JoestarXu 于 2023-5-25 11:45 编辑

项目没有接入在线表格设计器(designer),但是有打印需求,因此需要实现一个简版的设计器打印预览功能。支持用户实时调整边距与方向。如下图。
image.png771050414.png
根据下面的demo,我们可知,GC.Spread.Sheets.Events.BeforePrint 事件会产生一个 iframe,然后将这个iframe 展示处理。由于需要调整边距,因此我们需要将这个 iframe 作为预览组件的一部分,嵌入到组件dom 中,但是通过 appendChild 方法移动 iframe 后,发现 iframe 的内容被清空了。
image.png405178222.png

想咨询一下,当前版本,是否有方法可实现上面的需求,或只单纯的使用在线表格设计器中的打印预览功能

相关链接:
https://gcdn.grapecity.com.cn/showtopic-142510-1-11.html

3 个回复

倒序浏览
JoestarXu
超级版主   /  发表于:4 天前
沙发
您好,“通过 appendChild 方法移动 iframe 后,发现 iframe 的内容被清空了。”这一步您是具体怎么操作的呢?能否提供一个Demo我们这边根据代码调研一下。
回复 使用道具 举报
进先生
注册会员   /  发表于:3 天前
板凳
https://jscodemine.grapecity.com/share/rL2Gldldckq6azOVP9vtEg/
在官方的demo中,添加一个预览容器,然后在 BeforePrint 事件中,将 iframe 插入到容器中。
  1. <!doctype html>
  2. <html>
  3. <head>
  4.     <title>SpreadJS in TypeScript</title>
  5.         <link rel="stylesheet" type="text/css" href="node_modules/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css">
  6.      <link rel="stylesheet type="text/css" href="node_modules/@grapecity/spread-sheets-designer/styles/gc.spread.sheets.designer.min.css">
  7.     <script src="node_modules/systemjs/dist/system.src.js"></script>
  8.     <script src="systemjs.config.js"></script>
  9.     <button id='preview'>预览</button> <button id='cancel'>取消预览</button>
  10.     <div id="previewContainer" style="border:10px solid;"></div>
  11.     <div id="designer-container" style="width:100%;height:98vh;border:1px solid darkgray"></div>
  12.     <script>
  13.         System.import('./src/app');
  14.     </script>
  15. </head>
  16. <body>
  17. </body>
  18. </html>
复制代码

  1. let pc = document.getElementById('previewContainer')

  2. spread.bind(GC.Spread.Sheets.Events.BeforePrint,function(e,data){
  3.     // 监听打印前事件,获取回调中的iframe,修改iframe宽高及位置,并取消打印
  4.     sjsiframe = data.iframe
  5.     pc.appendChild(sjsiframe)

  6.     sjsiframe.style.width = '800px'
  7.     sjsiframe.style.height = '600px'
  8.     sjsiframe.style.top = '200px'
  9.     sjsiframe.style.left = '200px'
  10.     sjsiframe.style.background = '#ffffff'
  11.     sjsiframe.style.border = '10px solid'
  12.     data.cancel = true
  13. })
复制代码
回复 使用道具 举报
JoestarXu
超级版主   /  发表于:3 天前
地板
您好,问题已重现,这边调研一下解决方案,有后续进展我会在本帖下回复您。

本帖先做保留处理了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部