杰表技术论坛 's Archiver

jorton468 发表于 2016-10-15 12:52

有三个与iframe打印相关的问题需要请教您

在使用免费版的iframe打印时,有三个问题麻烦解答疑惑:
1. 我实现了通过点击某个按钮后,给隐藏的iframe.src赋url值,等iframe内页面加载完DOM并调用我写好的分页函数自动分页后,执行打印。但是测试时经常发现隐藏的iframe有时只打印了一页,查看页面HTML发现page1-4都是存在的,而给iframe设置宽高都为1 和visibility:hidden感觉要比display:none好些,就是感觉不太稳定,不知道为什么?设置iframe为display:none对打印真的没有任何影响吗?

2.目前我是通过iframe加载完DOM,又执行完分页函数后,在后面写了向父级隐藏input赋值“ok”来获取就绪状态的。如果我从父级使用onreadystatechange来获取就绪状态,iframe内页面是DOM加载完毕就会就绪,还是DOM加载完毕并执行完分页函数才会就绪?

3.由于打印机启动打印需要几秒钟延迟,所以我在调用无弹窗打印函数print(myDoc, false)后面,加了setTimeout函数用来延迟3s提示“正在打印...”,但是却发现它每秒执行了一次而不是延迟3秒,结果1份文件打出了3份。换成setInterval函数后,1份文件打印成了2份。请问这怎么解决啊?

jorton468 发表于 2016-10-17 14:14

管理员不在吗?怎么提出的问题都没有人回答啊?

jorton468 发表于 2016-10-17 21:42

经过不断测试[免费版],以上问题全部解决。
1. 设置iframe为display:none对打印还真的有影响。同样的iframe内嵌页面,iframe设为display:none只打印了一页并且未执行我写好的分页函数,而将iframe设为宽高都为1且visibility:hidden,就可以顺利的打印出全部页。
2. 使用js的onreadystatechange,据网上说不太稳定,我用的jquery的$ifm.load(function(){……}),测试得知iframe内嵌页面DOM加载完毕并且执行完写好的分页函数后,才算是load完毕。
3. 这个问题原因可能不打一处来,测试过程中发现,页面中引入的object控件的地址是直接从官网拷贝过来的,没有改;并且我在setInterval函数里clearInterval后又嵌套了setTimeout,不知道是哪个导致的。

所以提醒猿们和狮们,一定注意路径。

jorton468 发表于 2016-10-20 16:38

问题又重现了,真的没辙了。。。

管理员,上面第三个问题又出现了,我检查了路径没问题,用的是官网的最新cab,代码没法贴,只不过就是在直接打印后面加了个setTimeout(function(){},3000)函数而已,用的win8 IE10,经常打印出3份来。求解决啊。。。

admin 发表于 2016-10-21 16:39

上你的代码吧,我们这边帮你测测

jorton468 发表于 2016-10-22 09:42

问题解决,新问题又出来了~

@管理员 不知道为什么,发帖和回复Html代码禁用。今天早上我测试了一上午,发现莫名打印出多份的原因与setTimeout没关系,而是执行了多次 $iframe.onload(function(){……}) 函数导致的,我的情况是一个页面中有很多打印按钮,第一次点击某个按钮打印一份,第二次点击另一个按钮打印2份,……依次递增。除了第一次是给body增加iframe以外,之后点击按钮都是给已有的iframe动态改变src值,这样就会重复打印。我修改代码为每次都移除旧的增加新的iframe就可以了。具体原因不清楚,很可能是杰表控件的bug。

这个问题算是糊里糊涂的解决了,但是横向打印又不起作用了。。。
settings定义为
orientation:2,

paperName:'A4',

printer:'HP LaserJet P2050 Series PCL6',

topMargin:190.5,

leftMargin:190.5,

bottomMargin:190.5,

rightMargin:190.5,

printBackground:true,

copies:1



请问管理员,为什么啊?有哪些原因可能导致这个问题啊?

[[i] 本帖最后由 jorton468 于 2016-10-22 17:33 编辑 [/i]]

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.