2016-11-14 20 views
0

jsZipにcdnを使用しました。公式ドキュメントを参照してPDFファイルを生成し、.zip形式に圧縮しようとしました。jsZipを使用してPDFファイルをZipファイルに圧縮しようとしたとき

コード: -

var zip = new JSZip(); 
zip.file("Hello.pdf", "Hello World\n"); 
zip.file("Alphabet.pdf", "abcdef\n"); 
zip.generateAsync({type:"blob"}) 
.then(function(content) { 
    saveAs(content, "example.zip"); 
}); 

しかし、私はここに直面してる問題は、私は最終的に.zipファイルを生成することができるよけれども。私はフォーマットが壊れていると言っているので、PDFファイルを読むことができません。 (同じことがさえ.XLS/XLSX形式のために、私は.DOCおよび.txt形式のファイルに同じ問題に直面していないが起こる。)

the error message on trying to open PDF file

私が間違って何をしているのですか?さらに何をする必要がありますか?これは修正で私を持っている!どんな助けもありがとう。

EDIT: - @Fefux - 私はこれらの行に沿って何かを試しました。つまり、最初にpdfコンテンツを生成してから.zipに圧縮しましたが、どちらも機能しません。

function create_zip() { 
      var dynamicSITHtml = '<div class="container"><div class="row margin-top">'; 
      dynamicSITHtml = dynamicSITHtml + '<table><thead><tr><th>Target Date/Time</th><th>Referred To Role</th><th>Description</th><th>Priority</th><th>Status</th></tr></thead><tbody>'; 
      dynamicSITHtml = dynamicSITHtml + '</tbody></table></div></div>'; 
      $scope.dymanicSITHtml = dynamicSITHtml; 


      var pdf1 = new jsPDF('p', 'pt', 'letter'); 
      var ElementHandlers = { 
       '#editor': function (element, renderer) { 
        return true; 
       } 
      }; 
      pdf1.fromHTML($scope.dymanicSITHtml, 10, 10, { 
       'width': 1000, 
       'elementHandlers': ElementHandlers 
      }); 
      //pdf1.save($scope.operation.ReferenceNumber + '_task_summary_report.pdf'); 

      var zip = new JSZip(); 
      zip.file("Hello.pdf", pdf1.save($scope.operation.ReferenceNumber + '_task_summary_report.pdf')); 
      zip.generateAsync({ type: "blob" }) 
      .then(function (content) { 
       saveAs(content, "example.zip"); 
      }); 

助けてください!

ここに更新されたコードのコピー..... 私はjls-xlsxライブラリ - https://github.com/SheetJS/js-xlsx - を使ってxlsファイルを生成し、それを圧縮しようとしました。 ..

function Create_Zip() { 

     function datenum(v, date1904) { 
      if (date1904) v += 1462; 
      var epoch = Date.parse(v); 
      return (epoch - new Date(Date.UTC(1899, 11, 30)))/(24 * 60 * 60 * 1000); 
     } 

     function sheet_from_array_of_arrays(data, opts) { 
      var ws = {}; 
      var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } }; 
      for (var R = 0; R != data.length; ++R) { 
       for (var C = 0; C != data[R].length; ++C) { 
        if (range.s.r > R) range.s.r = R; 
        if (range.s.c > C) range.s.c = C; 
        if (range.e.r < R) range.e.r = R; 
        if (range.e.c < C) range.e.c = C; 
        var cell = { v: data[R][C] }; 
        if (cell.v === null) continue; 
        var cell_ref = XLSX.utils.encode_cell({ c: C, r: R }); 

        if (typeof cell.v === 'number') cell.t = 'n'; 
        else if (typeof cell.v === 'boolean') cell.t = 'b'; 
        else if (cell.v instanceof Date) { 
         cell.t = 'n'; cell.z = XLSX.SSF._table[14]; 
         cell.v = datenum(cell.v); 
        } 
        else cell.t = 's'; 

        ws[cell_ref] = cell; 
       } 
      } 
      if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); 
      return ws; 
     } 


     var data = [[1, 2, 3], [true, false, null, "sheetjs"], ["foo", "bar", new Date("2014-02-19T14:30Z"), "0.3"], ["baz", null, "qux"]]; 
     var ws_name = "SheetJS"; 

     function Workbook() { 
      if (!(this instanceof Workbook)) return new Workbook(); 
      this.SheetNames = []; 
      this.Sheets = {}; 
     } 

     var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); 

     /* add worksheet to workbook */ 
     wb.SheetNames.push(ws_name); 
     wb.Sheets[ws_name] = ws; 
     var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'binary' }); 

     function s2ab(s) { 
      var buf = new ArrayBuffer(s.length); 
      var view = new Uint8Array(buf); 
      for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; 
      return buf; 
     } 

     var jsonse = JSON.stringify([s2ab(wbout)]); 
     var testblob = new Blob([jsonse], { type: "application/json" }); 
     console.log(testblob); 


     var zip = new JSZip(); 

     zip.file("trial.xls", testblob); 

     var downloadFile = zip.generateAsync({ type: "blob" }); 
     saveAs(downloadFile, 'test.zip'); 
} 

を以下のコードを参照してください。しかし、ここでの問題は、私はこのエラーを取得しておくことです。trial.xls「のデータ 『』サポートされていない形式であります!」 この作業を行う方法はありますか?

+0

使用しているjsPDFのバージョンは? – Fefux

+0

私はjsPDF v1.3.2を使用しています –

答えて

2

pdfファイルを圧縮しないためにエラーが発生しました.Hello.pdfという名前のファイルを圧縮し、そのファイルの内容は "こんにちは、世界\ n」はこれが有効なPDFコンテンツ(Alphabet.pdfのために同じもの)ではありません

あなたは、有効なPDFコンテンツを生成し、それを圧縮した後にする必要が

EDIT:。。jsFiddle作業:https://jsfiddle.net/55gdt8ra/

$(function() { 
    var doc = new jsPDF(); 

     doc.setFontSize(40); 
     doc.text(35, 25, "Octonyan loves jsPDF"); 

var zip = new JSZip(); 
    zip.file("Hello.pdf", doc.output()); 
    zip.generateAsync({ type: "blob" }) 
    .then(function (content) { 
    saveAs(content, "example.zip"); 
    }); 
}) 
+0

こんにちは、私は同じことをやって行くことができますか?その場でPDFを生成し、それを圧縮するための任意のオプション? (私はjsPDFを使用してPDFファイルを生成しようとしましたが、jsZIpを使用して.zipファイルに変換しようとしましたが、どちらも動作しません)。 –

+0

あなたは 'blob'としてあなたのpdfをエクスポートすることができますjs pdfライブラリを見つける必要があります(私はpdf.jsが思う)。そして、このコンテンツをjszip – Fefux

+0

で圧縮してください。こんにちは、私が正確にやってみたことです。しかし、運がない:( –

関連する問題