2017-03-09 58 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代码中可能存在其他问题。

相关问题