c# - 无法打开附件 - Xamarin.Forms App
问题描述
我正在制作 Xamarin.Forms 应用程序。我在 Syncfusion 的帮助下生成带有简单示例的 PDF 以生成 PDF 并在流中转换。PDF 生成,发送,大约 27KB。但是当我去我的邮件并打开它时,我会We can't open this file
通过 Adobe Reader 获得:
//Create a new PDF document.
PdfDocument doc = new PdfDocument();
//Add a page.
PdfPage page = doc.Pages.Add();
//Create a PdfGrid.
PdfGrid pdfGrid = new PdfGrid();
//Add values to list
List<object> data1 = new List<object>();
Object row1 = new { ID = "E01", Name = "Clay" };
Object row2 = new { ID = "E02", Name = "Thomas" };
Object row3 = new { ID = "E03", Name = "Andrew" };
Object row4 = new { ID = "E04", Name = "Paul" };
Object row5 = new { ID = "E05", Name = "Gray" };
data1.Add(row1);
data1.Add(row2);
data1.Add(row3);
data1.Add(row4);
data1.Add(row5);
//Add list to IEnumerable
IEnumerable<object> dataTable = data;
//Assign data source.
pdfGrid.DataSource = dataTable;
//Draw grid to the page of PDF document.
pdfGrid.Draw(page, new PointF(10, 10));
//Save the PDF document to stream.
MemoryStream stream = new MemoryStream();
doc.Save(stream);
//Close the document.
doc.Close(true);
var message = new MailMessage();
message.From = new MailAddress("admin.server.com");
message.To.Add("test@hotmail.com");
message.Subject = "Subject";
message.Body = "Body";
message.Attachments.Add(new Attachment(stream, "Test.pdf", "application/pdf"));
SmtpClient SmtpServer = new SmtpClient("mail.server.com");
SmtpServer.Host = "mail.server.com";
SmtpServer.Port = 587;
SmtpServer.EnableSsl = false;
SmtpServer.UseDefaultCredentials = false;
SmtpServer.Credentials = new System.Net.NetworkCredential("admin.server.com", "1234567");
如何发现打开的问题是什么?
解决方案
该类MemoryStream
可用于写入和读取,但它只有一个Position
属性用于这两个任务。因此,如果一个实例同时用于流写入和读取,则通常必须Position
在执行写入代码后将属性重置为开始,以允许读取代码检索流的所有内容。
在您的情况下,这意味着您应该设置stream.Position
为0
after doc.Save(stream)
。
推荐阅读
- html - 如何构建响应式倾斜布局?
- node.js - “int”类型不是“String”类型的子类型
- javascript - 在不使用 FCM、One Signal、APN 等的情况下使用 Nodejs 项目推送通知
- java - Eclipse:无法在 Java Web 应用程序上编辑部署程序集
- sorting - 如何在 jcl 排序卡中将 s9(12)v9(2) 移动到 x(15)
- windows - Wix 工具集,MSI 安装程序:未在更改模式下创建应用程序快捷方式
- arrays - 根据 Reactjs 中的属性将水果数组存储在两个新数组中
- angular - 找不到源地图由于加载超时角度而取消加载
- wix - 如何仅更改降级错误对话框的标题?
- eloquent - Laravel 通过多对多关系分组