【问题标题】:Response doesn't give any output to download PDF响应没有提供任何输出来下载 PDF
【发布时间】:2013-05-18 11:37:24
【问题描述】:

我在没有 runat="server" 的 .aspx pahe 中有字段命名为 RPTHtml

 <asp:HiddenField ID="RPTHtml"  />

并在javascript中添加此代码并调用此页面的pagemethod

document.getElementById('RPTHtml').setValue =window.encodeURI
(document.getElementById(eval(result)[0].columnLineConfig.divToRender).innerHTML);
PageMethods.getHTMLToPdf(eval(result)[0].columnLineConfig.divToRender, srcurl);

现在,在我的页面方法中

<WebMethod()> _
     <System.Web.Script.Services.ScriptMethod()> _
     Public Shared Function getHTMLToPdf(ByVal div As String, ByVal InnerHTMl As String) As Boolean

    Dim pdfDocument As PdfDocument.Document = Nothing
    Dim pdfConverter As PdfConverter = New PdfConverter()
    Dim pdfBytes As Byte() = Nothing

    Dim strHtml As String = ""
    Dim htmlreport As String = ""
    Dim ReportFileName As String = ""
    Dim Response_1 As HttpResponse = System.Web.HttpContext.Current.Response


    If InnerHTMl.ToString() = "" Then
        Exit Function
    End If
    htmlreport = InnerHTMl.ToString()



    htmlreport = HttpUtility.UrlDecode(htmlreport)

    Response_1.Clear()
    Response_1.Buffer = True
    Response_1.ClearContent()
    Response_1.ClearHeaders()

    ReportFileName = GetReportName() + ".pdf"

    pdfConverter = New Winnovative.WnvHtmlConvert.PdfConverter()

    pdfConverter.AvoidImageBreak = True
    pdfConverter.AvoidTextBreak = True
    pdfConverter.TruncateOutOfBoundsText = True
    pdfConverter.LicenseKey = "LicenseKey"
    pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4
    pdfConverter.PdfDocumentOptions.StretchToFit = True

    pdfBytes = pdfConverter.GetPdfBytesFromHtmlString(htmlreport)

    Response_1.AddHeader("Content-type", "application/pdf")
    Response_1.AddHeader("Content-Disposition", "attachment; filename=" + ReportFileName)

    Response_1.BinaryWrite(pdfBytes)
    Response_1.Flush()
    Response_1.End()        
End Function

它没有给出任何输出,只是运行成功,但没有出现下载pdf的提示。

我错过了什么?或者它不能通过pagemethod实现。 提前谢谢!!!

【问题讨论】:

  • 尝试将“Content-type”、“application/force-download”作为您的内容类型。
  • 你的意思是我必须添加新的标题 Response_1.AddHeader("Content-type", "application/pdf").Response_1.AddHeader("Content-type", "application//force-download ")
  • 不,只是替换你的标题值。
  • 它也不起作用....!
  • 由于您是通过 javascript 调用它,因此请尝试在页面加载中作为单独的网页而不是“网络方法”实现相同的方法,并在您的链接中调用该网页。

标签: javascript asp.net pdf


【解决方案1】:

在您的 asp.net 页面中提供一个链接,例如

      <a href="javascript:ExportReport();">Export To Excel</a> 

在javascript中(我用jquery做同样的事情),动态创建一个HTML表单并提交,Export.aspx是生成pdf的页面

   function ExportReport() {                            
                        var frmT = $([
                            '<form id="frmExport" method="post" action="Export.aspx" target="_blank" style="display:none;">',
                                '<input type="hidden" name="pdfContents" id="tableContents" />',                                    
                            '</form>'

                        ].join('')).appendTo('body')[0]
                        var hdnTbl = $("#pdfContents", frmT);
                        hdnTbl.val( divRep.html() ); //  divRep.html() is the inner html you want to convert to PDF

                        frmT.submit();

                    }

由于您在隐藏字段中提交 HTML,您需要在您的 Export.aspx 页面中启用 ValidateRequest 属性

        ValidateRequest="false"

另外,您需要在 web.config 中启用 maxrequestlength,如下所示,

        <httpRuntime requestValidationMode="2.0" maxRequestLength="1024" />  <!-- 1024 kb  -->

&lt;/system.web&gt; 结束标记之前。如果您使用的是 .net 2.0 ,则可以省略 requestValidationMode="2.0" 属性。您可以在您的 export.aspx 页面加载方法中使用相同的 getHTMLToPdf 方法代码。 希望这会有所帮助。

【讨论】:

  • 我也有同样的问题。 Jeegnesh,最后一个答案对你有帮助吗?
  • 我从未尝试过,但我最终在新页面上植入了 Whole getHTMLToPdf 方法,以获得更好的响应。
猜你喜欢
  • 2020-12-11
  • 1970-01-01
  • 2021-12-04
  • 2011-11-22
  • 1970-01-01
  • 2012-06-04
  • 2021-09-18
  • 2013-12-14
  • 1970-01-01
相关资源
最近更新 更多