2017-03-09 60 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()"/> 

點擊此圖標轉到MonthlyController中的FileResult,名爲DownloadAdultReportPdf,其代碼如下所示:

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的能力。並有你調試'返回文件(工作流,....)'任何錯誤的代碼? –

+0

我正在測試的瀏覽器是Chrome的最新版本,當我在工作流變量的intellisense上我得到ReadTimeout和WriteTimeout錯誤,在這兩種情況下顯示爲System.InvalidOperationException – CryoFusion87

+0

有兩個問題首先craete pdf不工作第二個與你的jQuery代碼頁不會重定向到下載/查看pdf,因爲當你的jquery'post'調用返回文件時,沒有'success'函數定義來處理響應。 –

回答

1

有一些問題在你的C#代碼:

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

您使用Document doc不具有相關聯的一個PdfWriter用它打開它。特別是可能以這種方式更改頁面內容的說明可能會丟失。缺少的步驟,最終都在這裏執行:

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

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

你在這裏得到有效的完成PDF的副本byteInfo追加到finishedPDF在workStream因此,workStream現在包含兩個相同的PDF副本。

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

因此,在這裏,您返回一個MemoryStream與完成PDF的兩個副本。

解決這些問題以顯示有效的PDF。

您的JavaScript代碼中可能存在其他問題。

相關問題