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の内容には何らかのテキストが含まれている必要があるので、より正確にすることは可能ですか?
内容を確認するには、テキストエディタでPDFを開こうとしましたか? – DavidG
なぜこの行を追加しましたか? 'writer.CloseStream = false;'基本的な 'MemoryStream'は決して閉じられません!また、あなたが参照する答えは明示的に 'ms'を配列に変換します:' ms.ToArray() '。 –
@DavidG、いいえ、ありがとう、それは良い考えです! – meJustAndrew