我正在将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的答案。但是,这似乎不再起作用。我总是对“不确定”
typeof document.getElementById('printablePdf').print === 'undefined'
检查。似乎.print
不存在。
因此,我的问题是:如何在不打开弹出窗口的情况下使用JavaScript在HTML5中打印嵌入式PDF?
经过大量研究之后,我将把我在这里学到的东西发布给将来可能会发现的人。
根据浏览器,浏览器版本,浏览器配置和操作系统,PDF的显示方式有所不同。有很多变量,所以在这里我将讨论最常见的情况。
在所有浏览器上,我无法通过Java脚本调用任何形式的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)中的烘焙版本。哪个不支持PdfActhtml" target="_blank">ions。
IE:我并没有对IE进行太多测试。主要是因为在Firefox在OSX上无法使用之后,我放弃了从Javascript打印PDF(对我来说是一项要求)。
我的PDF是由我控制的服务器生成的,因此最终我在服务器中进行了服务更改,并添加了get
PNG服务,该服务基于与PDF生成所使用的相同标记生成了PNG。浏览器处理的图像要比我知道的要好得多的PDF,但是希望我能够重新使用PDF生成服务,因为它已在我的代码的其他地方使用。
它没有回答问题,但它是我所拥有的全部信息。我对以后可能会发现它的任何人的建议是:如果可能的话,放弃PDF并简化操作。否则,如果您知道如何在OSX的FF预览pdf查看器中通过Javascript调用print(),请更新此问题。
问题内容: 我已经创建了一个HTML5视频播放器(非常简单),可以在iPad和浏览器上完美运行。 但是,当我在iPhone上打开它时,我只得到一个播放按钮,当按下该按钮时,将在我所有东西之上的新窗口中打开本机视频播放器。 这意味着我无法访问自定义控件和时间跟踪(用Java语言编写),因为视频现在是独立运行的。 有什么方法可以覆盖Apple在iPhone上对HTML5视频的控制,并使它像在iPad上
我想从web浏览器的Brother标签打印机打印标签。我知道DYMO有一个JavaScript框架,可以使从浏览器打印变得简单。但我有一个兄弟标签打印机的客户,所以我需要使它工作。 我一直在做一些测试和搜索,令人惊讶的是,关于这个主题的信息如此之少。 到目前为止,我唯一成功使用的浏览器是谷歌Chrome,因为它似乎不打印页眉和页脚。我已经安装了打印机/驱动程序,并创建了尺寸为62 x 29mm的自
任何人都有从客户端(javascript/reactjs)打印到打印机wincode C342C的经验。我安装了qz.io库,所以我的javascript可以访问客户机的打印机。我已经尝试打印pdf作为base64到微软打印到pdf打印机和它的工作。我试着从我的javascript连接wincode 342C打印机,它工作了。对我不起作用的是从printer utilities应用程序向打印机发送
在web应用开发中都有报表打印等需求。不少开发者的做法是在后台生成PDF文件,然后通过浏览器显示浏览。现代浏览器大都支持PDF显示、打印,但是不支持静默打印,因此带给最终用户的体验不好。浏览器如何实现静默打印PDF呢?
问题内容: 我有一个页面应该在加载时启动“打印预览”页面。 我找到了这个: 但… 它在FireFox中不起作用。 这有点丑陋。 IE是否有更好的方法或适用于FireFox的方法? 问题答案: 您不能,“打印预览”是浏览器的功能,因此应避免被JavaScript调用,因为这会带来安全风险。 这就是您的示例使用Active X(绕过JavaScript安全问题)的原因。 因此,请改用您应该已经拥有的打
问题内容: 我是angular js的新手,我希望在按下按钮后在浏览器的新窗口中打开PDF文档。 我在前端发出GET请求,在后端有一个Java Rest服务,该服务响应GET并生成PDF。我希望在浏览器中打开此PDF。 如果无法以这种方式打开PDF,那么至少要使用AngularJs打开任何PDF,我该怎么做? 这就是后端在其余服务中生成响应的内容。 问题答案: 如果您有这样的事情: 而是这样做: