2017-12-08 6 views
0
public IHttpActionResult DownloadPDF() 
{ 
    var stream = CreatePdf(); 

    return ResponseMessage(new HttpResponseMessage 
    { 
     Content = new StreamContent(stream) 
     { 
      Headers = 
      { 
       ContentType = new MediaTypeHeaderValue("application/pdf"), 
       ContentDisposition = new ContentDispositionHeaderValue("attachment") 
       { 
        FileName = "myfile.pdf" 
       } 
      } 
     }, 
     StatusCode = HttpStatusCode.OK 
    }); 
} 
Here is the CreatePdf method: 

private Stream CreatePdf() 
{ 
    using (var document = new Document(PageSize.A4, 50, 50, 25, 25)) 
    { 
     var output = new MemoryStream(); 

     var writer = PdfWriter.GetInstance(document, output); 
     writer.CloseStream = false; 

     document.Open(); 
     document.Add(new Paragraph("Hello World")); 
     document.Close(); 

     output.Seek(0, SeekOrigin.Begin); 

     return output; 
    } 
} 

PDFをダウンロードできますが、コンテキストは空です。ここで私はメモリストリームを使用していると私はまた、それぞれのフォルダでファイルストリームのダウンロードを試みたが、私はダウンロードしたファイルを開くしようとするとまた、コンテンツが空です。誰かが私がここで逃しているものを助けることができますか?ここでWebAPI 2のitextsharpを使用してダウンロードしたPDFの空のコンテンツ

+0

はまた、ドキュメントを閉じるドキュメント – Nkosi

+0

を閉じる前に、ライターをフラッシュしてみなければなりません出力を返す前の最後のもの – Nkosi

答えて

0

private byte[] CreatePdf() { 
    var buffer = new byte[0]; 
    //stream to hold output data 
    var output = new MemoryStream(); 
    //creation of a document-object 
    using (var document = new Document(PageSize.A4, 50, 50, 25, 25)) { 
     //create a writer that listens to the document 
     // and directs a PDF-stream to output stream 
     var writer = PdfWriter.GetInstance(document, output); 

     //open the document 
     document.Open(); 

     // Create a page in the document 
     document.NewPage(); 

     // Get the top layer to write some text 
     var pdfContentBytes = writer.DirectContent; 
     pdfContentBytes.BeginText(); 

     //add content to page 
     document.Add(new Paragraph("Hello World")); 

     //done writing text 
     pdfContentBytes.EndText(); 

     // make sure any data in the buffer is written to the output stream 
     writer.Flush(); 

     document.Close(); 
    }  
    buffer = output.GetBuffer(); 
    return buffer; 
} 

のWeb APIを使用した場合、通常は私の作品アプローチされ、その後のアクションで

public IHttpActionResult DownloadPDF() { 
    var buffer = CreatePdf(); 

    return ResponseMessage(new HttpResponseMessage { 
     Content = new StreamContent(new MemoryStream(buffer)) { 
      Headers = { 
       ContentType = new MediaTypeHeaderValue("application/pdf"), 
       ContentDisposition = new ContentDispositionHeaderValue("attachment") { 
        FileName = "myfile.pdf" 
       } 
      } 
     }, 
     StatusCode = HttpStatusCode.OK 
    }); 
} 
+0

あなたのコメントをありがとう。しかし、今、私は次のエラー "ファイルを読み込めませんでした"ファイルを開くこともできません。私は得ている。 – Sabarish

+0

@Sabarish check update – Nkosi

+0

今までの問題と同じように、PDFの内容は表示されません。ここは空です。 – Sabarish

関連する問題