2

ABDpdf を使用して PDF をレンダリングし、ブラウザにストリーミングしましたが、レンダリングした PDF を電子メールに添付できるかどうか疑問に思っています。誰もそれをしたことがありますか?

PDFを一時ディレクトリに保存してからファイルを添付して削除する必要がない方法があることを願っています。

4

2 に答える 2

9

Meklarian の言う通りですが、1 つ指摘しておきたいのは、pdf をストリームに保存した後、ストリームの位置を 0 にリセットすることです。そうしないと、送信される添付ファイルはすべて foo-barred になります。

(それを理解するのに約2時間かかりました。痛い。他の誰かが時間を節約するのを手伝ってくれることを願っています。)

    //Create the pdf doc
    Doc theDoc = new Doc();
    theDoc.FontSize = 12;
    theDoc.AddText("Hello, World!");

    //Save it to the Stream
    Stream pdf = new MemoryStream();
    theDoc.Save(pdf);
    theDoc.Clear();

    //Important to reset back to the begining of the stream!!!
    pdf.Position = 0; 

    //Send the message
    MailMessage msg = new MailMessage();
    msg.To.Add("you@you.com");
    msg.From = new MailAddress("me@me.com");
    msg.Subject = "Hello";
    msg.Body = "World";
    msg.Attachments.Add(new Attachment(pdf, "MyPDF.pdf", "application/pdf"));
    SmtpClient smtp = new SmtpClient("smtp.yourserver.com");
    smtp.Send(msg);
于 2010-05-12T22:00:15.717 に答える
3

ABCpdf PDFサポートサイトのドキュメントによると、ストリームへの保存をサポートするDoc()オブジェクトのオーバーロードがあります。この機能を使用すると、MemoryStreamクラスを使用して、ディスクに明示的に書き込むことなく、生成されたPDFの結果を保存できます。

.NET用のABCpdfPDFコンポーネント:Doc.Save()
MemoryStream(System.IO)@ MSDN

MemoryStreamを作成したら、ストリームからの添付ファイルの作成をサポートする任意の電子メールプロバイダーにストリームを渡すことができます。System.Net.MailのMailMessageはこれをサポートしています。

MailMessageクラス(System.Net.Mail)@
MSDNMailMessage.Attachmentsプロパティ@MSDN
添付ファイルクラス@MSDN
添付ファイルコンストラクター@MSDN

最後に、これまでMailMessageクラスを使用したことがない場合は、SmtpClientクラスを使用してメッセージを送信します。

SmtpClientクラス(System.Net.Mail)

于 2009-10-22T16:52:54.113 に答える