Создание PDF с помощью Rotativa и вложение в электронное письмо

Я использую 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 = ""[email protected]"
            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("[email protected]")
            };
            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[]. Любые идеи, как я могу улучшить качество?


person HuwD    schedule 03.11.2017    source источник
comment
В порядке. Немного смущает. Проблема заключалась в том, что хорошая версия просматривалась в Chrome, а плохая — в Adobe. Если я открою плохой файл в Chrome, все в порядке. Думаю, я просто попробую использовать более четкий шрифт.   -  person HuwD    schedule 03.11.2017


Ответы (1)


Не могли бы вы попробовать прикрепить свой PDF-файл следующим образом:

  1. Сохраните файловый поток как файл на диске. Объявите полный путь к сохраненному файлу как переменную с именем attachmentFilename
  2. Используйте следующий код, чтобы прикрепить сохраненный файл к вашему электронному письму:

код:

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);
  1. Удалите файл снова, на всякий случай
person MichaelCleverly    schedule 03.11.2017