繁体   English   中英

创建了itextsharp pdf,但未在浏览器中显示

[英]itextsharp pdf is created but not displaying in browser

我正在使用ITextSharp创建易于打印的PDF,该PDF当前未在浏览器中显示。

通过单击将触发以下jquery的打印图标来处理PDF的生成:

<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显示在用户浏览器中?

您的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现在workStream包含两个相同的PDF副本。

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

因此,在这里您将返回带有两个完整PDF副本的MemoryStream

解决这些问题,以显示有效的PDF。

您的JavaScript代码中可能还存在其他问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM