0

我想将富文本框保存为 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);            
4

4 回答 4

0

正如大家所说,您不能简单地保存 RTF 并更改扩展名来制作 PDF,它们是不兼容的格式。在众多可用的商业组件中,AbcPdf 允许您阅读 RTF,然后将输出保存为 PDF:http ://www.websupergoo.com/abcpdf-11.htm#note

于 2012-08-30T14:01:21.913 回答
0

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

在这里您可以找到可以使用的当前可用的流格式类型:http: //msdn.microsoft.com/en-us/library/system.windows.forms.richtextboxstreamtype.aspx

如您所见,主要支持的类型是 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 :(");
}
于 2012-08-28T06:49:36.240 回答
0

可能是在 C# 中保存 PDF 和 MS Word 文件可以帮助您!!!!它使用iTextSharp

于 2012-08-28T06:49:47.677 回答
0

使用这个这个库可以帮助你。正如@JleruOHeP 在评论中所说,简单地重命名文件是行不通的。

于 2012-08-28T06:49:47.810 回答