这有点回到我 2012 年的问题 - Is it possible to fire a keypress event for an iframe that has been used to load a PDF file ,我想我可能错误地接受了那里的答案。
目前的情况是这样的——
- 主页的
document
附加了一个onkeypress
事件,当用户扫描特定条形码时,该事件会将 PDF 加载到对象中。 - PDF 使用 iTextSharp 创建并具有打开操作集 -
writer.SetOpenAction(new PdfAction(PdfAction.PRINTDIALOG))
(writer
是一个PdfWriter
).
所以用户将扫描自动加载 PDF 文件的条形码,打开它的打印对话框。然后用户将选择打印机并打印 PDF。当用户想要扫描下一个单元时,问题就来了,他们需要单击 html 正文中的某处(但在 PDF 对象之外),然后然后扫描要加载的新 PDF 的条形码。
我看过this并看到可以在 PDF 插件和浏览器之间设置某种通信,但可以告诉插件将控制权交给浏览器/javascript
编辑 一些额外的背景信息 -
- 我尝试过同时使用对象和 iframe。
- 使用调试器,如果我键入
document.activeElement.id
为元素的 ID 提供适当的元素,但是(在文本输入的情况下)不会出现任何按键。 - 使用调试器,我可以使用模糊事件元素将焦点带到另一个元素,甚至更改输入的值,但当用户键入/扫描时,HTML/javascript 看不到用户输入。
- 这是在 Internet Explorer 兼容模式下运行的旧版应用程序。
总结一下——我想扫描一个条形码,它将打开一个 PDF(已经完成),自动打开它的打印对话框(已经完成),用户打印 PDF,然后无需与页面进行任何进一步的人工交互(即单击打印对话框中的打印按钮后,用户无需使用鼠标或键盘)用户应该能够扫描另一个条形码,这将打开一个新的 PDF。
最佳答案
与其在 iframe/对象中呈现 PDF,不如利用现代 HTML5 和 Mozilla 的辛勤工作并使用 https://github.com/mozilla/pdf.js/ 呈现它。 - 它是一个完全 HTML5/javascript PDF 渲染器,不需要任何插件。
http://mozilla.github.io/pdf.js/web/viewer.html 有一个不错的在线演示
然后你会一直在同一个页面上使用 JavaScript,并且可以避免在两个环境之间传递焦点/事件等,这样你就可以很容易地在页面上的任何地方捕获事件。
关于javascript - 打印在 iTextSharp 中创建的 PDF,然后将控制权返回给浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34094059/