C# 使用Rotativa创建PDF并附加到电子邮件

C# 使用Rotativa创建PDF并附加到电子邮件,c#,asp.net-mvc,email,pdf,rotativa,C#,Asp.net Mvc,Email,Pdf,Rotativa,我使用Rotativa生成pdf礼券,然后将其附加到电子邮件并发送给客户。如果我使用Rotativa来生成pdf文件,它工作得非常出色,但是当我将该文件附加到电子邮件时,它似乎失去了质量。见下图: 从生成的pdf获得高质量 通过电子邮件发送的pdf文件质量差 代码如下: public Byte[] pdfVoucher_file(string sk = "", int custInt = 0, string voucher_code = "") { var p

我使用Rotativa生成pdf礼券,然后将其附加到电子邮件并发送给客户。如果我使用Rotativa来生成pdf文件,它工作得非常出色,但是当我将该文件附加到电子邮件时,它似乎失去了质量。见下图:

从生成的pdf获得高质量

通过电子邮件发送的pdf文件质量差

代码如下:

    public Byte[] pdfVoucher_file(string sk = "", int custInt = 0, string voucher_code = "")
    {
        var pdf = new ActionAsPdf("getVoucher/" + voucher_code, new { sk = sk, custInt = custInt })
        {
            FileName = "Voucher_" + voucher_code.ToString().Trim() + ".pdf",
        };

        Byte[] pdfData = pdf.BuildPdf(ControllerContext);
        return pdfData;
    }

    public void email_Voucher(string sk, string voucher_code)
    {
        try
        {
            int constId = 123;
            string toEmail = ""test@site.com"
            string mailBody = "Your Voucher";
            MemoryStream pdfStream = new MemoryStream(pdfVoucher_file(sk, constId, voucher_code));
            Attachment pdf = new Attachment(pdfStream, "Voucher_" + voucher_code.Trim() + ".pdf", "application/pdf");

            MailMessage mail = new MailMessage()
            {
                Subject = "Your Gift Voucher",
                Body = mailBody,
                From = new MailAddress("tickets@mysite.com")
            };
            mail.To.Add(toEmail);
            mail.IsBodyHtml = true;
            mail.Attachments.Add(pdf);

            SmtpClient client = new SmtpClient
            {
                Port = 25,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                Host = "my.mailserver.com"
            };
            client.Send(mail);
        }
        catch (Exception) { }
    }

最好的猜测是,这与将其转换为Byte[]对象有关。有什么办法可以提高质量吗?

你能试着用以下方式附上你的PDF文件吗:

  • 将文件流另存为磁盘上的文件。将保存的文件的完整路径声明为名为
    attachmentFilename
  • 使用以下代码将保存的文件附加到电子邮件:
  • 代码:

  • 再次删除该文件,以确保安全

  • 好啊有点尴尬。问题在于,好的版本在Chrome上被浏览,而坏的版本则在Adobe上被浏览。如果我用铬合金打开坏的就好了。我想我会试着用一种更清晰的字体。
    Attachment attachment = new Attachment(attachmentFilename, 
    MediaTypeNames.Application.Pdf);
    ContentDisposition disposition = attachment.ContentDisposition;
    disposition.CreationDate = File.GetCreationTime(attachmentFilename);
    disposition.ModificationDate = File.GetLastWriteTime(attachmentFilename);
    disposition.ReadDate = File.GetLastAccessTime(attachmentFilename);
    disposition.FileName = Path.GetFileName(attachmentFilename);
    disposition.Size = new FileInfo(attachmentFilename).Length;
    disposition.DispositionType = DispositionTypeNames.Attachment;
    
    mail.Attachments.Add(attachment);