Google スライド: ページ; PNG画像生成

Google スライド: ページ; PNG画像生成 (Google Slides: Page; Generate PNG Image)

プレゼンテーション内の指定ページの画像を生成します。ダウンロード用URL(無認証・30分有効)を発行することも可能です。なお、ファイル(プレゼンテーション)の共有設定が変更されるとダウンロード用URLは無効になります。

2019-09-02 (C) Questetra, Inc. (MIT License)
https://support.questetra.com/ja/addons/google-slides-page-generate-png-image/

Configs
  • A: 通信許可の設定名([OAuth2.0設定]メニュー)を選択してください *
  • B: ファイルID(PRESENTATION-ID)をセットしてください (ファイルURI内の44文字) * #{EL}
  • C: スライドID(Object-ID)をセットしてください (URI内のid.以降) * #{EL}
  • D: スライドのPNG画像が追加格納されるファイル群型データ項目を選択してください(更新) *
  • E: 別名保存したい場合はファイル名をセットしてください #{EL}
  • F: ダウンロードURLが格納される文字列型データ項目を選択してください(更新)
Script
// (c) 2019, Questetra, Inc. (the MIT License)

//// == OAuth2 Setting example ==
// Authorization Endpoint URL:
//  "https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force"
// Token Endpoint URL:
//  "https://accounts.google.com/o/oauth2/token"
// Scope:
//  "https://www.googleapis.com/auth/presentations https://www.googleapis.com/auth/spreadsheets.readonly"
// Client ID:
//  ( from https://console.developers.google.com/ )
// Consumer Secret:
//  ( from https://console.developers.google.com/ )
//  *Redirect URLs: "https://s.questetra.net/oauth2callback"


//////// START "main()" ////////
main();
function main(){ 

//// == Config Retrieving / 工程コンフィグの参照 ==
const oauth2   = configs.get( "conf_OAuth2"  ) + "";
const presentationId = configs.get( "conf_PresentationId") + "";
const objectId = configs.get( "conf_ObjectId") + "";
const dataIdD = configs.get( "conf_DataIdD" ) + "";
let   saveAs  = configs.get( "conf_SaveAs") + "";
const dataIdF = configs.get( "conf_DataIdF" ) + "";
// 'java.lang.String' (String Obj) to javascript primitive 'string'
if( saveAs === "" ){
  saveAs = processInstance.getProcessInstanceId() + ".png";
}
engine.log( " AutomatedTask Config: Presentation ID: " + presentationId );
engine.log( " AutomatedTask Config: Object ID: " + objectId );


//// == Data Retrieving / ワークフローデータの参照 ==
var tmpFiles = engine.findDataByNumber( dataIdD ); // java.util.ArrayList
if( tmpFiles === null ) {
  engine.log( " AutomatedTask FilesArray {D}: empty" );
  tmpFiles = new java.util.ArrayList();
}else{
  engine.log( " AutomatedTask FilesArray {D}: " + 
              tmpFiles.size() + " files" );
}


//// == Calculating / 演算 ==
/// obtain OAuth2 Access Token
const token   = httpClient.getOAuth2Token( oauth2 );

/// get Page Thumbnail
let apiRequest = httpClient.begin(); // HttpRequestWrapper
apiRequest = apiRequest.bearer( token );
const apiUri = "https://slides.googleapis.com/v1/presentations/" +
                presentationId + "/pages/" +
                objectId + "/thumbnail";
engine.log( " AutomatedTask Trying: GET " + apiUri );
const response = apiRequest.get( apiUri );
const responseCode = response.getStatusCode() + "";
engine.log( " AutomatedTask ApiResponse: Status " + responseCode );
if( responseCode !== "200"){
  throw new Error( "\n AutomatedTask UnexpectedResponseError: " +
         responseCode + "\n" + response.getResponseAsString() + "\n" );
}
const responseStr = response.getResponseAsString() + "";
const responseObj = JSON.parse( responseStr );
engine.log( " AutomatedTask ApiResponse: width " + responseObj.width );
engine.log( " AutomatedTask ApiResponse: height " + responseObj.height );

/// get Page Thumbnail (PNG Image)
let apiRequest2 = httpClient.begin(); // HttpRequestWrapper
const apiUri2 = responseObj.contentUrl;
engine.log( " AutomatedTask Trying: GET " + apiUri2 );
const response2 = apiRequest2.get( apiUri2 );
const responseCode2 = response2.getStatusCode() + "";
engine.log( " AutomatedTask ApiResponse: Status " + responseCode2 );
if( responseCode2 !== "200"){
  throw new Error( "\n AutomatedTask UnexpectedResponseError: " +
         responseCode2 + "\n" + response2.getResponseAsString() + "\n" );
}
const qfile = new com.questetra.bpms.core.event.scripttask.NewQfile(
    saveAs, response2.getContentType(), response2.getResponse()
  );
tmpFiles.add( qfile );


//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdD, tmpFiles );
if( dataIdF !== "" ){
  engine.setDataByNumber( dataIdF, responseObj.contentUrl );
}

} //////// END "main()" ////////

Download

Capture

Notes

  1. Presentation ID: https://docs.google.com/presentation/d/1p33hGJFUNYixBmMeaV81nsOVYGUUrZIFyErinFp3CI8/edit#slide=id.g613777c84a_0_0
  2. Slide Object ID: https://docs.google.com/presentation/d/1p33hGJFUNYixBmMeaV81nsOVYGUUrZIFyErinFp3CI8/edit#slide=id.g613777c84a_0_0
  3. Default File Name: #{processInstanceId}.png
  4. 画像サイズはページ設定に関わらず自動的に決定されます。(2019年9月現在)
  5. サイズ指定が必要な場合、ダウンロードURLの “=s1600” を “=s1200” などに書き換えて下さい。

See also

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

%d人のブロガーが「いいね」をつけました。