2014-12-01 4 views
2

웹 사이트의 URL에서 일부 테스트 페이지를 인쇄하는 스크립트 (예 : )를 작성했으며 인쇄 버튼을 누를 때마다 프린터 선택 대화 상자가 나타납니다. 하지만 내 계좌가 프린터와 동기화되어 있기 때문에 이것을 피하고 싶습니다.웹에서 Google 클라우드 프린트

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

답변

0

가젯 대신 선전 및 html 버튼을 사용하여이를 수행 할 수 있습니다. 이를 위해서는 oinstall 권한을 얻기 위해 Google 개발자 콘솔을 사용해야합니다.

그런 다음 클라우드 프린트 서비스를 인증해야합니다.

다음 일련의 기능은 특별히 Google Apps Script에서 사용하기에 적합하지만 적용 할 수 있습니다. 가장 먼저 할 일은 클라우드 프린트 서비스를 인증하기 위해 이동할 수있는 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; 
}