2017-03-09 43 views
0

私はITextSharpを使用して、現在ブラウザに表示されていない印刷用PDFを作成しています。 PDFのitextsharp pdfが作成されましたが、ブラウザに表示されません。

生成は以下のjQueryをトリガー印刷アイコンをクリックする介して処理されます。

<script type="text/javascript"> 
function printDiv() { 
    $.post("@Url.Action("DownloadAdultReportPdf", "Monthly")", 
    { 
     RegionId: $("#RegionId").val(), 
     DatCodeId: $("#DatCodeId").val(), 
     AgencyId: $("#AgencyId").val(), 
     ReportVersionId: $("#ReportVersionId").val() 
    }); 
} 

印刷アイコンコードは次のようになります。

<input class="print-icon tooltip" title="print this report" type="image" src="~/Content/images/printer-icon-23.png" onclick="printDiv()"/> 

をクリックこのアイコンは、DownloadAdultReportPdfというMonthlyControllerのFileResultに移動します。このコードは次のとおりです。

public FileResult DownloadAdultReportPdf(AdultViewModel model) 
    { 
     MemoryStream workStream = new MemoryStream(); 
     DateTime dTime = DateTime.Now; 
     string strPDFFileName = string.Format("SamplePdf" + dTime.ToString("yyyyMMdd") + "-" + ".pdf"); 
     Document doc = new Document(); 
     doc.NewPage(); 
     Paragraph paragraph = new Paragraph(); 
     paragraph.Add("Hello World!"); 
     doc.SetMargins(0f, 0f, 0f, 0f); 

     string strAttachment = Server.MapPath("~/Downloads/" + strPDFFileName); 

     PdfWriter.GetInstance(doc, workStream).CloseStream = false; 
     doc.Open(); 
     doc.Add(paragraph); 
     doc.Close(); 

     byte[] byteInfo = workStream.ToArray(); 
     workStream.Write(byteInfo, 0, byteInfo.Length); 
     workStream.Position = 0; 

     return File(workStream, "application/pdf", strPDFFileName); 
    } 

ユーザーのブラウザにPDFを表示させるにはどうすればよいですか?

+0

ブラウザにはpdfの準備ができている必要があります。そして、 'return File(workStream、....)'のコードをデバッグしてください。 –

+0

私がテストしているブラウザはChromeの最新バージョンです。私はworkTime変数を知っていて、ReadTimeoutを取得していて、どちらの場合もWriteTimeoutエラーがSystem.InvalidOperationExceptionとして表示されています – CryoFusion87

+0

最初にcraeteに2つの問題がありますjqueryの 'post'呼び出しがファイルを返すときに、' success'関数が応答を処理するために定義していないので、pdfをダウンロード/リダイレクトするためにリダイレクトされません。 –

答えて

1

いくつかの問題は、あなたのC#コードであります

Document doc = new Document(); 
doc.NewPage(); 

あなたはそれにPdfWriterに関連して、それを開くことなくDocument docを使用しています。このようにページコンテンツを変更する可能性のある命令は特に失われる可能性があります。行方不明のステップは、最終的にはここで実行されています

PdfWriter.GetInstance(doc, workStream).CloseStream = false; 
doc.Open(); 
doc.Add(paragraph); 
doc.Close(); 

byte[] byteInfo = workStream.ToArray(); 
workStream.Write(byteInfo, 0, byteInfo.Length); 

あなたがここに効果的byteInfoに完成したPDFのコピーを取得し、workStreamにfinishedPDFに追加します!したがって、workStreamには、PDFの2つの同一のコピーが順番に含まれています。

workStream.Position = 0; 
return File(workStream, "application/pdf", strPDFFileName); 

ここでは、MemoryStreamには完成したPDFの2つのコピーを返します。

有効なPDFを表示するには、これらの問題を修正してください。

JavaScriptコードには、これ以上の問題が存在する可能性があります。