ICT教育

GASでPDF変換してみる

ICT教育に直接関係ないのですが、面白そうなので寄り道です。

Google Apps Script 、略してGAS。Googleの各種サービスを活用するためのスクリプト言語です。ベースはJavaScriptなのですがGoogleが提供する多数のAPIを用いていろんなことができちゃいます。

Webスクレイピングのプログラムを作ってみたのですが、これは訳あって公開できません。

もう一つ、Googleドキュメント、Googleスプレッドシート、Googleスライドを一括でPDFに変換するプログラムを作成したので公開します。
ベースにしたのは、nepia_infinity さんの次のページです。nepia_infinityさん、ありがとうございます。

https://note.com/nepia_infinity/n/nee3897455855

こちらのコードを元に以下の改造をしています。

  1. GoogleスプレッドシートとGoogleスライドにも対応
  2. 既に同名のPDFが存在する場合はスキップする
  3. Googleドキュメント、Googleスライド、Googleスライド以外のファイルはスキップする
// 指定されたフォルダ以下の全ドキュメント、スプレッドシート、スライドをPDFに一括変換する
const inFolderID = '1rfJCSeGOmcRjfPY9sgjioVGiaXUTTQIG' // 変換前フォルダID
const outFolderID = '17Irn7SZBU50zSztLP-hs7MuFbbyLkTXN' // 変換後フォルダID

// 変換前フォルダからすべての対象ファイルを読み取りPDF変換を呼び出す
function getDriveFiles(){
	folder = DriveApp.getFolderById(inFolderID);
	const files = folder.getFiles();
	console.log('変換前フォルダ: ' ,folder.getName());

	while (files.hasNext()) {
		const file = files.next();
		exportAsPDF(file);
	}
}

// PDF変換 対象ファイルをPDFに変換
function exportAsPDF(file) {
	const fileId = file.getId();
	// Google ドキュメント
	if (file.getMimeType() === 'application/vnd.google-apps.document') { 
		document = DocumentApp.openById(fileId);
		url = 'https://docs.google.com/document/d/'+ fileId +'/export?';
	} else
	// Google スライド
	if (file.getMimeType() === 'application/vnd.google-apps.presentation') { 
		document = SlidesApp.openById(fileId);
		url = 'https://docs.google.com/presentation/d/'+ fileId +'/export/pptx?';
	} else
	// Google スプレッドシート
	if (file.getMimeType() === 'application/vnd.google-apps.spreadsheet' ) { 
		document = SpreadsheetApp.openById(fileId);
		url = 'https://docs.google.com/spreadsheets/d/'+ fileId +'/export?';
	} else
	return;

	const opts = {
		exportFormat: 'pdf',	// ファイル形式の指定 pdf / csv / xls / xlsx
		format: 'pdf', 		// ファイル形式の指定 pdf / csv / xls / xlsx
		size: 'A4',		// 用紙サイズの指定 legal / letter / A4
		portrait: 'true',	// true → 縦向き、false → 横向き
		fitw: 'true',		// 幅を用紙に合わせるか
		docNames: 'false',	// シート名を PDF 上部に表示するか
		printtitle: 'false',	// スプレッドシート名を PDF 上部に表示するか
		pagenumbers: 'false',	// ページ番号の有無
		gridlines: 'false',	// グリッドラインの表示有無
		fzr: 'false',		// 固定行の表示有無
	}

	const urlExt = [];
	for(optName in opts){
		urlExt.push(optName + '=' + opts[optName]);
	}

	const options = urlExt.join('&');
	const token = ScriptApp.getOAuthToken();
	const response = UrlFetchApp.fetch(url + options, {
		headers: {'Authorization': 'Bearer ' + token}
	});

	const fileName = document.getName();
	const fileFullName = fileName + '.pdf';
	const blob = response.getBlob().setName(fileFullName);
	const folder = DriveApp.getFolderById(outFolderID);

	// var r = event.source.getActiveRange();
	if(fileExists(fileFullName, folder)){
		// 出力先フォルダに同名のファイルが存在したら作らない
	}else{
		folder.createFile(blob); // PDFを指定したフォルダに保存
		console.log('変換ファイル名 ',fileFullName);
	}
} // end of exportAsPDF

// 出力先フォルダにファイルが存在するかチェック
function fileExists(fileFullName, folder) {
	files = folder.getFilesByName(fileFullName);
	while (files.hasNext()) {
		file = files.next();
		if(fileFullName === file.getName()) {
			return true;
		}
	}
	return false;
} // end of fileExists

使い方

  1. Googleドライブを開きます
  2. +新規 > その他 > Google Apps Script
  3. コードを書く欄に上記スクリプトを上書きで貼り付け
  4. スクリプトの名前をなんでもいいから付けておきます(無題のプロジェクトとなっているところ)
  5. Googleドライブ上に変換前フォルダと変換後フォルダを作成しておきます
  6. 2つのフォルダのフォルダIDをコピーし、スクリプトの所定の箇所に貼り付けます
  7. あとは、変換前フォルダに変換したいファイルを置いてプログラムを実行するだけ
    タイマーをセットして(例えば10分に1回とか)勝手に変換させるという手もあります

-ICT教育
-, ,

© 2024 HACHAGARY Powered by AFFINGER5