我们正在使用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);
}
}