2016-08-11 13 views
1

私はthis questionで答えに続き、レンダリングの忠実度をテストするためにiTextSharpでMVCビューからpdfを出力しようとしました。iTextSharpは開くことができないPDFを返します

私は、次のコードを持っている:

var ms = new MemoryStream(); 

var document = new Document(PageSize.A4, 10, 10, 10, 10); 

var writer = PdfWriter.GetInstance(document, ms); 

document.Open(); 
var html = this.RenderView(GetViewName(), reportVM); 
var css = System.IO.File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "\\Content\\site.css")); 

var msCss = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); 

var msHtml = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)); 

XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, msHtml, msCss); 

document.Close(); 

return File(ms, "application/pdf"); 

残念ながらそれはメッセージブラウザでウィンドウを返します。

はPDF

主な原因は何であるの読み込みに失敗しました。この行動の?

注:iTextSharpをベースにしたPdfSharpも同じhtmlからpdfを作成していますので、iTextSharpを正しく使用していないと思います。

EDIT:

私がコメント欄でブルーノの提案に従っているので、私はリターンを変更:

bytes = ms.ToArray(); 

return File(new MemoryStream(bytes), "application/pdf"); 

そして今、結果は2ページ空のPDFファイルですので、それは良いですが、 pdfの内容には何らかのテキストが含まれている必要があるので、より正確にすることは可能ですか?

+1

内容を確認するには、テキストエディタでPDFを開こうとしましたか? – DavidG

+2

なぜこの行を追加しましたか? 'writer.CloseStream = false;'基本的な 'MemoryStream'は決して閉じられません!また、あなたが参照する答えは明示的に 'ms'を配列に変換します:' ms.ToArray() '。 –

+0

@DavidG、いいえ、ありがとう、それは良い考えです! – meJustAndrew

答えて

関連する問題