C# 将富文本框另存为pdf文件,并发送带有附件的电子邮件

C# 将富文本框另存为pdf文件,并发送带有附件的电子邮件,c#,winforms,pdf-generation,richtextbox,C#,Winforms,Pdf Generation,Richtextbox,我想将富文本框保存为pdf文件。每次我保存一个文件,Adobe Reader都无法打开它 private void button3_Click(object sender, EventArgs e) { SaveFileDialog MyFiles = new SaveFileDialog(); MyFiles.Filter = "PDF Files|*.pdf"; MyFiles.Title = "Save As..."; MyFiles.DefaultExt = "*

我想将富文本框保存为pdf文件。每次我保存一个文件,Adobe Reader都无法打开它

private void button3_Click(object sender, EventArgs e)
{
   SaveFileDialog MyFiles = new SaveFileDialog();
   MyFiles.Filter = "PDF Files|*.pdf";
   MyFiles.Title = "Save As...";
   MyFiles.DefaultExt = "*.pdf";

   if (MyFiles.ShowDialog() == DialogResult.OK) 
   {
      richTextBox1.SaveFile(MyFiles.FileName, RichTextBoxStreamType.PlainText);
      richTextBox3.SaveFile(MyFiles.FileName, RichTextBoxStreamType.PlainText);
      richTextBox4.SaveFile(MyFiles.FileName, RichTextBoxStreamType.PlainText);
      richTextBox5.SaveFile(MyFiles.FileName, RichTextBoxStreamType.PlainText);
   }
}

我还使用了“发送”按钮发送带有附件的电子邮件,但问题是我无法发送电子邮件:

        MailMessage MyMail = new MailMessage(richTextBox1.Text, richTextBox4.Text);
        MyMail.To.Add(new MailAddress(richTextBox4.Text));
        MailAddress mail = new MailAddress(richTextBox1.Text);
        MyMail.From = mail;
        MyMail.Subject = richTextBox5.Text;
        MyMail.Body = richTextBox3.Text;
        MyMail.Attachments.Add(new Attachment(richTextBox2.Text));
        SmtpClient MySmtp = new SmtpClient(TheServer.Text);
        MySmtp.UseDefaultCredentials = true;
        MySmtp.EnableSsl = true;
        MySmtp.Port = Convert.ToInt32(ThePort.Text);
        MySmtp.Send(MyMail);            

问题是,使用该方法,您无法以PDF格式保存RichTextBox的内容

您可以在此处找到当前可用的流格式类型,可以使用:

如您所见,主要支持的类型是RTF(富文本格式),一种纯文本多平台格式:这与PDF非常不同。看一看

编辑:我只是回答提问者的评论,询问一些帮助代码:

// This method opens a dialog and save the content of the passed RichTextBox
private bool ShowRichTextBoxSaveDialog(RichTextBox richTextBox)
{
    SaveFileDialog newFileDialog = new SaveFileDialog();
    newFileDialog.Filter = "PDF Files|*.pdf";
    newFileDialog.Title = "Save As...";
    newFileDialog.Filter = "*.pdf";

    // If the user confirm the dialog window...
    if (newFileDialog.ShowDialog() == DialogResult.OK)
    {
        try
        {
            richTextBox.SaveFile(newFileDialog.FileName, RichTextBoxStreamType.PlainText);

            // Success!
            return true;
        }
        catch(Exception e)
        {
            // Error during saving!
            MessageBox.Show(String.Concat("Error during saving: ", e.Message));

            return false;
        }
    }
    else
            // Aborted by the user!
            return false;
}

private void button3_Click(object sender, EventArgs e)
{
   // NEXT WILL SHOW UP 4 DIALOGS, FOR ASKING THE USER 4 FILES TO SAVE!
   this.ShowRichTextBoxSaveDialog(richTextBox1);
   this.ShowRichTextBoxSaveDialog(richTextBox3);
   this.ShowRichTextBoxSaveDialog(richTextBox4);

   // HERE I ALSO CHECK IF THE SAVING IS SUCCESSFUL..
   if (this.ShowRichTextBoxSaveDialog(richTextBox5))
       MessageBox.Show("Success in saving :)");
   else
       MessageBox.Show("Failure in saving :(");
}

也许我能帮助你!!!!它使用

使用或库可以帮助您。正如@JleruOHeP在一篇评论中所说的那样,简单地重命名文件是行不通的。

正如大家所说,您不能简单地保存RTF并更改扩展名以生成PDF,它们是不兼容的格式。在众多可用的商业组件中,AbcPdf允许您以RTF格式读取,然后将输出保存为PDF:

您正在以RTF格式保存文本,但将扩展名设置为PDF。只是重命名文件不会更改其格式…可能您可以共享更多详细信息,不能理解你的确切问题。我认为你应该考虑使用一个像PDF创作的外部库,感谢AlOT,但是有一个小问题,因为它只保存了一个RealTrimeBox,我怎么能把它保存起来呢?我想这是因为你在使用相同的文件名(MyFrase.FrimeNeNe),每次调用richTextBoxX.SaveFile(…)都会覆盖该文件!因此,您必须要求用户保存更多文件(=许多MyFiles.ShowDialog()),或重命名每个文件:File1.rtf、File2.rtf。。。如果您想了解更多详细信息,请询问!!:)还要记住,如果调用MyFiles.ShowDialog(),结果只会得到一个文件名(用户选择的文件名)!再次感谢maxe,但是你能告诉我应该如何重新排列我的代码吗?我很感激你的帮助help@user1629419是的……但请耐心等待,直到明天,我现在不在电脑前!:)