2017-04-25 11 views
0

サーバー(Asp.Netコア)でPDFを生成し、(角)ブラウザで取得します。私はPDFレポートを生成するItextSharp</strong><strong>Asp.Netコア</strong>と<strong>を使用してブラウザに送信してい

角度(typescriptです)を使用して、次に
[HttpGet] 
public async Task<IActionResult> GetStream(string ids) 
{ 
    try 
     { 
      List<int> labRequestIds = JsonConvert.DeserializeObject<List<int>>(requestIds); 
      MemoryStream ms = new MemoryStream(); 
      Document doc = new Document(PageSize.A4, 30f, 30f, 30f, 30f); 
      PdfWriter writer = PdfWriter.GetInstance(doc, ms); 
      doc.Open(); 
      await CreatePlateDoc(labRequestIds, doc); 
      doc.Close(); 
      writer.Flush(); 
      ms.Seek(0, SeekOrigin.Begin); 
      return File(ms, "application/pdf"); 
     } 
} 

私はそのようなブラウザーで応答を得る: サービス:

getStream(requestIds: Array<number>) { 
    return new Promise((resolve, reject) => { 
     this.http.get(AppConfig.LrmApiUrl + '/fileGenerator/plates' 
      + '?requestIds=' + JSON.stringify(requestIds) 
      , { headers: this.authService.getHeaders() }) 
      .subscribe((data:any) => { 
       console.log(data); 
       if (data) { 
        resolve(data._body); 
       }     
      }, 
      err => reject(Tools.handleResponseError(err)) 
     ); 
    }); 
} 

とコントローラでは、そのようなFilesaver.js で作成したPDFをダウンロードしよう:

downloadClick() {  
    this._fileGeneratorService.getPlateStream(this.selectedRequestIds) 
     .then(data => { 
      let saveAs = require('file-saver'); 
      let name = this.selectedRequests.map(function (x) { 
       return x.code; 
      }).join(); 
      let blob = new Blob([data], { type: 'application/pdf }); 
      saveAs(blob, name); 
     }) 
     .catch(err => console.log(err)); 
} 

しかし、動作しません。ダウンロードしたpdfは空ですが、情報があります。終わり

+0

この問題を解決する方法の任意のアイデア?前もって感謝します。 –

+0

「空ですが情報はありますか?」とはどういう意味ですか? 0バイトですか?それとも空白のページがありますか? –

+0

メモ帳で開くと++がコードを持っていますが、Adobeで開くとページが空白になります。 –

答えて

0

私はそのようにそれを解決:

public async Task<IActionResult> CreatePlatePdf(string dto) 
    { 
     try 
     { 
      List<int> dto= JsonConvert.DeserializeObject<List<int>>(dto); 
      MemoryStream ms = new MemoryStream(); 
      Document doc = new Document(PageSize.A4, 30f, 30f, 30f, 30f); 
      PdfWriter writer = PdfWriter.GetInstance(doc, ms); 

      doc.Open(); 
      await this.CreateDoc(dto, doc); 
      doc.Close(); 
      writer.Flush(); 
      byte[] byteInfo = ms.ToArray(); 
      ms.Write(byteInfo, 0, byteInfo.Length); 
      ms.Seek(0, SeekOrigin.Begin); 
      return this.File(ms, "application/pdf", fileName.pdf); 
     } 
} 

、そのようなクライアントでそれを呼び出す:

downloadPlatesClick() 
{ 
    window.location.href = url_pdf; 
} 

だから今私が持っている唯一の問題は、あなたが呼び出すことができるということですそれは許可なし。だから私のsrviceの呼び出しで認証(ヘッダー)を追加する方法を知っている誰ですか?

関連する問題