byte[] byteData= GetByteData(this.reportContent);
response.Clear();
response.ClearContent();
response.ClearHeaders();
response.Buffer = true;
response.AddHeader("Accept-Header", byteData.Length.ToString());
response.ContentType ="application/pdf";
response.Charset = "utf-8";
response.AddHeader("Accept-Ranges", "bytes");
string cd = $"inline;filename=myReport-123.pdf";
response.AddHeader("Content-Disposition", cd.ToString().Trim());
response.AddHeader("Content-Length", byteData.Length.ToString());
if (byteData.Length > 0)
response.BinaryWrite(byteData);
response.Flush();
response.Close();
上面的代码不起作用,文件下载为Report.aspx而不是myReport-123.pdf我几乎尝试了所有方法,但没有工作。当我运行像localhost://........ report.aspx这样的应用程序时,它工作正常,但当我像我的IP https://192.168.1.1/...report.aspx一样打开时,它不工作。此问题仅在Chrome和IE上存在,而在Firefox中不存在。如果我传递MYFILENAME SHOULDNOTCHANGE.pdf,则fileName.pdf也将更改为report.aspx
我尝试添加response.AddHeader(“Content-Transfer-Encoding”,“Binary”);
我也尝试了其他可用的选择在互联网上,但无法得到所需的细节。
上面的代码不起作用,文件下载为Report.aspx而不是myReport-123.pdf我几乎尝试了所有方法,但没有工作。当我运行像localhost://........ report.aspx这样的应用程序时,它工作正常,但当我像我的IP https://192.168.1.1/...report.aspx一样打开时,它不工作。此问题仅在Chrome、IE和Edge上存在,Firefox中没有此问题。
1条答案
按热度按时间fafcakar1#
首先,也是最重要的?
您发送到客户端的原始二进制数据流必须是100%完美的二进制格式的PDF文件,并且是Adobe PDF格式。
换句话说,您不能只是传输一个word文件,甚至一些简单的标记,并期望另一端通过某种神奇的方式将其转换为一个有效的PDF二进制文档,并将标记转换为一个符合Adobe PDF标准的文档。
因此,例如,此代码将发送/下载有效的PDF文件。
你没有显示,也没有解释你在哪里以及如何创建一个有效的PDF文件,你的源代码看起来是:
那么,上面的PDF文档是否100%有效?
你不能只是发送相同的一些标记,但在你传输有问题的内容之前,该内容必须是一个正确的二进制格式的PDF文档。
现在,如果reportContent实际上是一个二进制PDF文档,而不是一些标记,那么理论上,上面使用的posted I代码应该可以工作。换句话说,您可以用二进制流替换PDF文档-一个有效的PDF,这也应该工作。
所以,上面可以说成这样:
同样,注意非常接近-结果输出必须是一个合法的和正确格式化的二进制PDF文件。
例如,您不能在这里发送一些HTML标记,您必须获取内容(this. reportContent),并在发送/传输reportContent中的任何内容之前转换为有效的PDF二进制文件格式。
换句话说,reportContent不能是标记-它必须是有效的二进制PDF格式字节流。
因此,作为测试,将此. reportContent的内容写入本地. pdf文件,并查看PDF查看器是否可以将该文件作为PDF打开。
编辑:测试是否有有效的PDF文件
所以,要测试你是否有一个有效的PDF,然后在你的开发机器上,尝试以下代码:
现在,在运行上述代码后,尝试使用PDF查看器打开test.pdf文件。文件是否正确打开?
所以,在你测试任何东西之前,尝试任何其他的道路或代码或方法?
您必须验证上述输出是100%有效的工作pdf文件。
那么,尝试上面的方法,你能用PDF查看器打开生成的PDF文件吗?