创建后下载PDF文件

时间:2017-10-24 11:08:48

标签: c# asp.net-mvc

我要求我必须创建一个pdf文件。这个Pdf文件包含一些数据。现在,主要要求是在我创建pdf之后,我应该能够下载它。现在PDF正在创建,但无法下载。 请注意它的MVC应用程序.. 我正在分享代码以供进一步参考

public class HoldFilesController : Controller
{
    // GET: HoldFiles
    string holdpath = ConfigurationManager.AppSettings["HoldPath"].ToString();
    public ActionResult Index()
    { 
        DirectoryInfo dirInfo = new DirectoryInfo(holdpath);

        List<FileInfo> files = dirInfo.GetFiles().ToList();

        return View("Index",files);
    }

     **The above controller gets filenames from a file directory**

    public ActionResult ViewFile(string[] Name)
    {
        for (int i = 0; i < Name.Length; i++)
        {
            string filepath=holdpath + @"\" + Name[i];

            string result;
            using (StreamReader streamReader = new StreamReader(filepath))
            {
                result = streamReader.ReadToEnd();
            }

            using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream())
            {
               Document document = new Document(PageSize.A4, 10, 10, 10, 10);

               PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
               document.Open();

               Paragraph paragraph = new Paragraph();
               paragraph.Add(result);
               document.Add(paragraph);
               document.Close();
               byte[] bytes = memoryStream.ToArray();
               memoryStream.Close();
               Response.ContentType = "application/pdf";
               Response.AppendHeader("Content-Disposition", "attachment; 
filename=MyFile.pdf");
               Response.TransmitFile(Server.MapPath("~/Files/MyFile.pdf"));
               Response.End();
               Response.Close();

            }
        }

Above控制器将获取文件名,读取文件并创建pdf和 下载。 在调试代码时,我可以看到该文档已创建。但有 下载时遇到麻烦

2 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

private FileResult ViewFile(string[] Name)
        {
         //create your file at filePath
           byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
           return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, "MyFile.pdf"));
        }

答案 1 :(得分:0)

您似乎使用随机文件名下载Android/Sdk/tools/emulator -avd android2 -skin 768x1280 -use-system-libs 而不是使用您刚创建的文件。首先,将MyFile部分移到Response之外并停止关闭using,因为MemoryStream块会在完成后为您执行此操作。所以在using之外你应该写一些类似的东西:

using