打印在iTextSharp中创建的PDF,然后将控件返回到浏览器

Print PDF Created in iTextSharp and then Return Control to Browser

本文关键字:然后 控件 返回 浏览器 PDF iTextSharp 创建 打印      更新时间:2023-09-26

这在某种程度上回到了我2012年的问题-是否有可能为用于加载PDF文件的iframe触发按键事件,我认为我可能错误地接受了那里的答案。

目前的情况是这样的-

  • 主页面的document附带有一个onkeypress事件,当用户扫描特定条形码时,该事件将把PDF加载到对象中
  • PDF是使用iTextSharp创建的,并具有打开的操作集-writer.SetOpenAction(new PdfAction(PdfAction.PRINTDIALOG))writerPdfWriter

因此,用户将扫描条形码,条形码会自动加载PDF文件,打开打印对话框。然后,用户将选择打印机并打印PDF。当用户想要扫描下一个单元时,问题就来了——他们需要点击html主体内的某个位置(但在PDF对象之外),然后扫描条形码以加载新的PDF。

我看了一下,发现可以在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在同一个页面上,可以避免在两个环境之间传递焦点/事件等,这样您就可以很容易地捕捉页面上任何地方的事件。