我有一个创建 PDF 的过程。我希望这些 PDF 是临时的、短暂的。我希望能够在用户单击按钮时执行以下操作:
string CreatePDF()//returns fileName.pdf
PromptUserToDownloadPDF()
DeletePDF(fileName.pdf)
我希望避免必须创建清理过程并处理用户在运行清理时同时创建 PDF 时出现的任何竞争条件。
在 winforms 中,我会同步提示用户下载文件。我如何在网络中完成类似的任务?
UPDATE
请注意,我正在使用第 3 方应用程序来创建 PDF(阿帕奇FOP http://xmlgraphics.apache.org/fop/)。基本上我(将)有一个调用命令行的函数:
C:>fop“输入文件”“输出.pdf”
所以,在记忆中不是一个选择......除非我能以某种方式做......
string CreatePDF()//returns fileName.pdf
string RecreatePDFInMemory()
DeletePDF(fileName.pdf)
PromptUserToDownloadPDF()
像这样的事情:
byte[] _pdfbytes = CreatePDF();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Length", _pdfbytes.Length.ToString());
Response.BinaryWrite(_pdfbytes);
由于这会在内存中创建 PDF,因此您无需担心清理问题。
编辑OP的编辑:
从内部CreatePDF
, 您可以使用Path.GetTempFileName http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx创建一个临时文件并执行“fop”以写入该文件。在返回之前立即删除该文件byte[]
。我建议在 a 内执行此删除操作finally
堵塞。但是,“Fop”确实支持将其输出通过管道传输到标准输出。拥有CreatePDF
函数抓取可能更干净。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)