5

コードに問題があります。多くのPDFを含むドライブフォルダをループして、これらを1つのファイルにマージしようとしています。コードを使用すると、ドライブフォルダー内の最後のPDFのPDFが作成され、期待どおりにすべてがマージされません。

function MergeFiles(){
  var folder = DocsList.getFolderById('myFolderID'); 
  var files = folder.getFiles(); 
  var blobs = [];    
  for( var i in files )   
    blobs.push(files[i].getBlob().getBytes());
  Logger.log(blobs.push(files[i].getBlob().getBytes()));
  var myPDF = Utilities.newBlob(blobs.pop(), "application/pdf", "newPDF.pdf");
  folder.createFile(myPDF);
}
4

6 に答える 6

2

複数ページのpdfは、複数のpdfファイルの内容を単純に連結したものではありません...誘惑しているように見えると認めても、このアプローチで結果が得られるとは思えません...

私もそういうものを探していましたが、今まで成功しませんでした。

于 2013-03-15T09:37:52.710 に答える
0

メソッドは各ファイルの.getBytes()バイナリ配列を返すため、作成されるのは次の配列の配列です。

blobs.push(files[i].getBlob().getBytes());

代わりに、ループ内の現在の項目の配列を、ループの反復ごとに増加するアキュムレータ配列と連結します。次に、ループを終了した後、アキュムレータ配列の内容を.newBlob()またはに渡すことができます.setBytes()

于 2013-03-15T02:09:40.177 に答える
0

あなたのコードは、コーディングしたとおりに動作しています。 blobsは配列であり、 を実行するとblobs.pop()、配列内の最後の項目 (最後の PDF) が取得されます。

すべきことは、ブロブを配列ではなく単一のblobオブジェクトに連結することです。ただし、GASでこれを行う方法がわかりません

于 2013-03-14T23:58:08.750 に答える