使用Javascript,HTML5,AngularJS从浏览器打印嵌入式PDF

菲尔汗

我正在将Base64编码的PDF作为字符串从服务器加载到我的JavaScript中。我的客户端应用程序正在使用AngularJS,HTML5。

我的HTML看起来像这样:

<div id="printablePdfContainer">
  <iframe id="printablePdf" width="100%" height="100%"></iframe>
</div>

我的JavaScript看起来像这样:

var pdfName = 'data:application/pdf;base64,' + data[0].PrintImage;
var embeddedPdf = document.getElementById('printablePdf');
embeddedPdf.setAttribute('src', pdfName);
$scope.printDocument(embeddedPdf);

我的printDocument函数如下所示:

$scope.printDocument = function() {
      var test = document.getElementById('printablePdf');
      if (typeof document.getElementById('printablePdf').print === 'undefined') {

        setTimeout(function(){$scope.printDocument();}, 1000);

      } else {

        var x = document.getElementById('printablePdf');
        x.print();
      }
    };

printDocument功能取自堆栈溢出中的一个预先存在的问题(静默打印嵌入式PDF),这是打印嵌入式PDF的答案。但是,这似乎不再起作用。我总是对“不确定”

typeof document.getElementById('printablePdf').print === 'undefined'

检查。似乎.print不存在或类似的东西。

因此,我的问题是:如何在不打开弹出窗口的情况下使用JavaScript在HTML5中打印嵌入式PDF?

菲尔汗

在这里也回答:从javascript嵌入标签打印Pdf

经过大量研究之后,我将把我在这里学到的东西发布给将来可能会发现它的任何人。

根据浏览器,浏览器版本,浏览器配置和操作系统,PDF的显示方式有所不同。有很多变量,因此在这里我将讨论最常见的情况。

  • 在所有浏览器上,我无法通过Javascript调用任何形式的print()方法,而我只能使用PdfActions。OPENACTION将调用print。我使用iText将它们嵌入到PDF中。

  • Chrome使用Adobe的查看器,该查看器不提供对任何print()方法的访问权限,但会执行嵌入在PDF中的PdfAction。因此,您可以在任何查看那些动作的应用程序中打开“ OpenAction”到PDF中,并在每次打开PDF调用时进行打印。

  • Firefox(一定版本之上,尽管是所有最新版本)使用Windows中的Adobe查看器,该查看器也可以识别PdfAction。但是,在OSX中,它失去了对Adobe Viewer的支持,并切换到Firefox Viewer(pdf.js)中的烘焙版本。哪个不支持PdfActions。

  • IE:我对IE并没有进行太多测试。主要是因为在Firefox在OSX上不起作用之后,我放弃了从Javascript打印PDF(对我来说是一项要求)。

我的PDF是由我控制的服务器生成的,因此最终我在服务器中进行了服务更改,并添加了get PNG服务,该服务基于与PDF生成所使用的相同标记生成了PNG。浏览器处理的图像比我知道的要好得多的PDF,但是希望我能够重用PDF生成服务,因为它已在我的代码的其他地方使用。

它没有回答问题,但它是我所拥有的全部信息。我对以后可能会发现它的任何人的建议是:如果可能的话,放弃PDF并简化工作。否则,如果您知道如何在OSX的FF预览pdf查看器中通过Javascript调用print(),请更新此问题。

-菲尔

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Google Chrome浏览器的嵌入式Javascript中设置断点?

使用HTML5 / Canvas / JavaScript拍摄浏览器内屏幕截图

我们如何在浏览器中缓存嵌入式SVG?

跨浏览器嵌入式视频灰度滤镜

无法在iPhone上的Facebook嵌入式浏览器中加载CSS

在浏览器中使用html5和javascript显示交互式2D平面图

我想在React中的网页中使用嵌入式浏览器

浏览器何时在嵌入式元素中呈现空格?

在Excel Javascript API中创建嵌入式Web浏览器或iframe

在嵌入式Vue应用中操纵浏览器网址

哪个嵌入式浏览器显示广告网站?

为什么嵌入式YouTube视频在Google Chrome浏览器中停止运行?

如何使用JavaFx Java 1.7在嵌入式Web浏览器中支持window.print()

如何从嵌入式pdf与浏览器进行通信

如何为Chromium嵌入式浏览器的不同实例设置不同的Cookie

带有嵌入式javascript的自动pdf打印

使用HTMl5,如何对嵌入式YouTube视频进行居中和居中?

SSH:X转发浏览器的嵌入式视频时,CPU使用率超高

使用Windows 10的Visual Studio中的嵌入式Web浏览器控件将发生什么

如何设置Silverlight浏览器应用程序与嵌入式Web浏览器控件之间的通信

从嵌入式Tableau报表导出为PDF时,浏览器控制台中发生未经授权的错误

JSF创建嵌套的嵌入式浏览器

在浏览器中以猫鼬显示嵌入式文档数据模型

嵌入式浏览器中对Google的OAuth请求

嵌入式 IE 浏览器:如何在导航完成前检测重定向?

没有浏览器的嵌入式设备上的 MS Graph API 身份验证

启动嵌入式 Tomcat 并从命令行打开浏览器

嵌入式 JS (ejs) 不会向浏览器呈现数据

如何通过 javascript 在 c# 中首次播放嵌入式 YouTube(使用 Gecko 浏览器)?