如何确定下载的pdf为何损坏

时间:2019-09-27 21:04:48

标签: asp.net-mvc pdf google-docs-api

我们正在使用google docs来获取模板doc,通过占位符或通过创建表格将值合并到其中,然后将其下载为pdf。下载完成后,我们会将其安装在多个地方,并附在电子邮件中并发送出去。 PDF总是能顺利通过。

现在我正在做一个非常相似的事情,但不是通过电子邮件发送pdf,而是将其作为内存流返回到mvc端点以直接下载。当我这样做时,无法打开生成的pdf。如果我将其与其他将打开的pdf一起以崇高的文字打开,那么好的将带有PDF标头和所有pdf内容。无法打开的那个只有一长串二进制内容-0000 0000 0000 0000 0000 0000 0000 0000 0000 ...

这是我用来生成pdf的代码。知道为什么它会被破坏吗?

MVC端点

var file = await _googleDocService.GeneratePrelimAgreementFile(vm);

var contentType = "application/pdf";
var result = new FileContentResult(file.FileContents, contentType) { FileDownloadName = file.FileName };
return result;

Google文档服务方法

public async Task<File> GeneratePrelimAgreementFile(PrelimCreateViewModel viewModel){
    //create the google doc here

    var contractPdf = driveService.Files.Export(docId, "application/pdf");

    var stream = new MemoryStream();
    var result = new File();

    contractPdf.MediaDownloader.ProgressChanged += progress =>
    {
        if (progress.Status != DownloadStatus.Completed) return;

        var filename = newTitle.Replace(" ","_") + ".pdf";

        result = new File(stream, filename);
    };

    await contractPdf.DownloadAsync(stream);

    return result;
}

文件类

public class File
{
    public byte[] FileContents { get; set; }

    public Stream UploadedFile { get; set; }
    public string FileName { get; set; }
    public File()
    {

    }
    public File(Stream file, string fileName)
    {
        this.UploadedFile = file;
        this.FileName = fileName;
        this.FileContents = new byte[file.Length];
        file.Read(this.FileContents, 0, (int)this.FileContents.Length);
    }
}

0 个答案:

没有答案