2017-03-22 21 views
0

Google Appsスクリプトをウェブアプリケーションとしてデプロイする方法を、クリックで生成されたPDFをダウンロードしようとしています。ほとんど動作しますが、結果のファイルは無効です。私はそれがエンコーディングの問題なのか他のものなのかわかりません。コードはシンプルに見えるAppsスクリプトでウェブアプリケーション経由でApps Scriptによって生成されたPDFをダウンロード

function clickHandler(ev) { 
    ev.preventDefault(); 
    google.script.run 
    .withSuccessHandler(function(data) { 
    var pdf = new Blob([window.atob(data)]); 
    var href = window.URL.createObjectURL(pdf); 

    var link = document.querySelector('#hiddenLink'); 
    link.href = href; 
    link.click(); 
    }) 
    .makePDF(); 
} 

任意の提案:ブラウザで

function makePDF() { 
    ... 
    var pdfBlob = doc.getAs('application/pdf'); 
    return Utilities.base64Encode(pdfBlob.getBytes()); 
} 

、クリックハンドラがありますか?

ありがとうございます!

答えて

0

誰かがApps ScriptからPDFをクライアントのjavascriptに渡そうとしている場合、回答を投稿しました。私が作ったよりずっと簡単です。

よりもむしろbase64でエンコードをいじり、単なるバイト列のバックパス:今すぐ

function makePDF() { 
... 
var pdfBlob = DocumentApp.openById('1234').getAs('application/pdf'); 
return pdfBlob.getBytes(); 
} 

を、クライアント側で、ArrayBufferから新しいブロブを構築します。それも簡単です:

function clickHandler(ev) { 
    google.script.run 
    .withSuccessHandler(function(data) { 
    var arr = new Uint8Array(data); 
    var blob = new Blob([arr.buffer], {type: 'application/pdf'}); 

    var obj_url = window.URL.createObjectURL(blob); 

    var hiddenLink = document.getElementById('hiddenPDFLink'); 
    hiddenLink.setAttribute('href', obj_url); 
    hiddenLink.setAttribute('download', 'filename.pdf'); 
    hiddenLink.click(); 
    }) 
    .makePDF(); 
} 

それだけです!誰かがこれが役立つことを願っています。

0

私はあなたのmakePDF関数がいくつかの他のstuff/Calculationを行っていると仮定し、最後にそのドキュメントをローカルコンピュータにダウンロードする必要があります。あなたは何ができるか

は成功ハンドラ

var link = document.querySelector('#hiddenLink'); 
link.href = "https://docs.google.com/feeds/download/documents/export/Export?id=**TheIdOfDocumenToBeDownloaded**&exportFormat=pdf"; 
link.click(); 

それはその後、あなたのローカルコンピュータにドキュメントを保存するためのプロンプトを与えるの内側にあります。

+0

これはクリーンでシンプルなソリューションですが、認証に問題があります。私のApps Scriptは私として実行されますが、誰でも実行できます。ドライブにアクセスしてファイルを読み書きすることはできますが、Appsスクリプト以外ではすべての人がファイルを読むことはできません。私はそれがダウンロードされた後にスクリプト内のファイルのアクセス許可を変更しようとすることができますが、それを心配する必要はありませんいいです。 – Stan

関連する問題