ASP.NET - 将PDF发送给用户

P.B*_*key 2 c# asp.net

我有一个创建PDF的过程.我希望这些PDF是暂时的和短暂的.我希望能够在用户单击按钮时执行以下操作:

string CreatePDF()//returns fileName.pdf
PromptUserToDownloadPDF()
DeletePDF(fileName.pdf)
Run Code Online (Sandbox Code Playgroud)

我想避免必须创建一个清理程序,并处理用户在运行清理时同时创建PDF的任何竞争条件.

在winforms中,我会同步提示用户下载文件.我怎样才能在网上做类似的任务?

更新
请注意,我正在使用第三方应用程序来创建PDF(Apache FOP).基本上我(将)有一个调用命令行的函数:

C:> fop"inputfile""output.pdf"

所以,在记忆中不是一种选择......除非我能以某种方式做到......

string CreatePDF()//returns fileName.pdf
string RecreatePDFInMemory()
DeletePDF(fileName.pdf)
PromptUserToDownloadPDF()
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 8

像这样的东西:

byte[] _pdfbytes = CreatePDF();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Length", _pdfbytes.Length.ToString());
Response.BinaryWrite(_pdfbytes);
Run Code Online (Sandbox Code Playgroud)

由于这会在内存中创建PDF,因此您无需担心清理.

编辑OP的编辑:

从内部CreatePDF,您可以使用Path.GetTempFileName创建临时文件并执行"fop"来写入该文件.在返回之前立即删除该文件byte[].我建议在finally块内执行此删除操作.但是,"Fop"确实支持将其输出通过管道输出到stdout.拥有CreatePDF可能更清洁的功能抓取.