我制作了一个打印PDF文件的静态打印Web应用程序。关键是将JavaScript添加到静默打印的PDF文件中。
为此,我使用chrome中的acrobat reader打开PDF,允许我执行脚本(具有适当的权限)。
但是正如宣布的那样,这个解决方案在chrome 45之后将无效,因为npapi问题。
我想一个可能的解决方案可能是使用最近发布的chrome扩展程序的printProvider。
然而,我无法想象如何触发任何printProvider事件。 所以问题是:可以考虑使用chrome扩展来创建一个静态打印Web应用程序,以及如何为HTML页面的嵌入式PDF启动和处理打印作业。
答案 0 :(得分:7)
最后我为这个问题找到了一个可接受的解决方案,因为我找不到它,但是阅读了许多相同问题的帖子,我会在这里留下我的解决方案。
首先,您需要将您的打印机添加到Google云打印,然后您需要为Google Developers Console
添加一个项目然后添加此脚本,并在需要打印时执行print()函数。此方法将打印内容中指示的文档
一旦管理您的打印机,应用程序将请求您的许可。
function auth() {
gapi.auth.authorize({
'client_id': 'YOUR_GOOGLE_API_CLIENT_ID',
'scope': 'https://www.googleapis.com/auth/cloudprint',
'immediate': true
});
}
function print() {
var xhr = new XMLHttpRequest();
var q = new FormData()
q.append('xsrf', gapi.auth.getToken().access_token);
q.append('printerid', 'YOUR_GOOGLE_CLOUD_PRINTER_ID');
q.append('jobid', '');
q.append('title', 'silentPrintTest');
q.append('contentType', 'url');
q.append('content',"http://www.pdf995.com/samples/pdf.pdf");
q.append('ticket', '{ "version": "1.0", "print": {}}');
xhr.open('POST', 'https://www.google.com/cloudprint/submit');
xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.auth.getToken().access_token);
xhr.onload = function () {
try {
var r = JSON.parse(xhr.responseText);
console.log(r.message)
} catch (e) {
console.log(xhr.responseText)
}
}
xhr.send(q)
}
window.addEventListener('load', auth);
<script src="https://apis.google.com/js/client.js"></script>
无论如何,这个脚本会抛出一个'Access-Control-Allow-Origin'错误,即使这出现在文档中......我也无法使其工作:(
Google API使用跨源资源共享(CORS)支持请求和响应。您无需加载完整的JavaScript客户端库即可使用CORS。但是,如果您希望应用程序访问用户的个人信息,则必须使用Google的OAuth 2.0机制。为了实现这一目标,Google提供了独立的auth客户端 - JavaScript客户端的一个子集。
所以要抛出这个我必须安装这个chrome扩展CORS。我确信有人会改进这个脚本以避免这个chrome扩展。
答案 1 :(得分:1)
删除npapi之后,我认为这不可能仅通过编程方式实现。我所知道的目前唯一一种让Chrome无声打印的方法是使用chrome kiosk模式,这是一个在启动chrome时必须设置的标志(模式)。
看看这些SO帖子:
答案 2 :(得分:1)
您可以将应用程序注册到URI方案,以触发本地应用程序以静默方式打印。设置非常简单明了。这是一种无缝的体验。我已经在这里发布了完整的例子:
答案 3 :(得分:0)
过去使用浏览器插件(例如Java + NPAPI,ActiveX)是可以实现的,但几年来大多数浏览器已将其列入黑名单。
如果对使用类似技术的现代解决方案感兴趣,那么该体系结构通常需要满足以下条件:
利用这些技术的项目的详细信息(其中一些是开源的)在这里: https://stackoverflow.com/a/28783269/3196753
由于这些项目的源代码可能会有所不同(几百行到上万行),因此除非查询特定项目的API,否则代码段会太大。
侧面说明:某些技术提供了专用的云资源,从而以潜在的延迟和隐私为代价增加了便利性。在撰写本文时,最受欢迎的“免费”云解决方案-Google Cloud Print-计划于2020年12月停用。