2014-12-01 62 views
2

谷歌云打印我写的打印从URL链接的网站, 每次我按下打印按钮时一些测试网页的脚本,会出现选择打印机对话框框架。但我想避免这种情况,因为我的帐户与打印机同步。从网络

window.onload = function() { 
var gadget = new cloudprint.Gadget(); 
gadget.setPrintButton(
    cloudprint.Gadget.createDefaultPrintButton("print_button_container")); // div id to contain the button 
    gadget.setPrintDocument("url", "Test Page", "https://www.google.com/landing/cloudprint/testpage.pdf"); 
} 
+2

我认为这是不可能的。我试图实现同样的事情,但没有做到。 – Stopfan 2014-12-02 13:06:44

回答

0

您可以使用誓言和html按钮而不是小工具来实现此目的。这需要使用谷歌开发者控制台来获得oauth权限。

然后,你需要授权的云打印服务。

以下功能特别适用于Google Apps脚本,但可以进行修改。要做的第一件事就是登录一个url链接,你可以去授权云打印服务。

function showURL() { 
    var cpService = getCloudPrintService(); 
    if (!cpService.hasAccess()) { 
    Logger.log(cpService.getAuthorizationUrl()); 
    } 
} 

在这组函数的以下组件中,请务必替换客户端ID和秘密。

function getCloudPrintService() { 
    return OAuth2.createService('print') 
    .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth') 
    .setTokenUrl('https://accounts.google.com/o/oauth2/token') 
    .setClientId('**YOUR CLIENT ID FROM GOOGLE DEVELOPER CONSOLE**') 
    .setClientSecret('**YOUR CLIENT SECRET**') 
    .setCallbackFunction('authCallback') 
    .setPropertyStore(PropertiesService.getUserProperties()) 
    .setScope('https://www.googleapis.com/auth/cloudprint') 
    .setParam('login_hint', Session.getActiveUser().getEmail()) 
    .setParam('access_type', 'offline') 
    .setParam('approval_prompt', 'force'); 
} 

function authCallback(request) { 
    var isAuthorized = getCloudPrintService().handleCallback(request); 
    if (isAuthorized) { 
    return HtmlService.createHtmlOutput('You can now use Google Cloud Print from Apps Script.'); 
    } else { 
    return HtmlService.createHtmlOutput('Cloud Print Error: Access Denied'); 
    } 
} 

接下来,获取您要使用的云打印打印机的ID。这可以在Chrome的设置菜单中获得。设置 - >显示高级设置 - >在云打印“管理” - >选择您要使用“管理”的打印机 - >高级详细

要启动云打印,您需要添加的细节到票:

var ticket = { 
    version: "1.0", 
    print: { 
    color: { 
     type: "STANDARD_COLOR", 
     vendor_id: "Color" 
    }, 
    duplex: { 
     type: "LONG_EDGE" 
    }, 
    copies: {copies: 1}, 
    media_size: { 
     width_microns: 215900, 
     height_microns:279400 
    }, 
    page_orientation: { 
     type: "PORTRAIT" 
    }, 
    margins: { 
     top_microns:0, 
     bottom_microns:0, 
     left_microns:0, 
     right_microns:0 
    }, 
    page_range: { 
     interval: 
     [{start:1, 
     end:????}] 
    } 
    } 
}; 

有许多选项,你可以添加到票。见documentation

最后,你需要启动云打印服务。您可以在这里定义您想要的特定打印机。

var payload = { 
"printerid" : '**COPY YOUR PRINTER ID HERE**', 
"title"  : "Prep Print", 
"content" : PUT YOUR CONTENT HERE...(e.g. If you do all of this using Google Apps Script...HtmlService.createHtmlOutput(VARIABLE).getAs('application/pdf')), 
"contentType": 'text/html', 
"ticket" : JSON.stringify(ticket) 
}; 
var response = UrlFetchApp.fetch('https://www.google.com/cloudprint/submit',  { 
method: "POST", 
payload: payload, 
headers: { 
    Authorization: 'Bearer ' + getCloudPrintService().getAccessToken() 
}, 
"muteHttpExceptions": true 
}); 


response = JSON.parse(response); 

if (response.success) { 
    Logger.log("%s", response.message); 
} else { 
    Logger.log("Error Code: %s %s", response.errorCode, response.message);} 

    var outcome = response.message; 
}