I "Step 2" står der at du kan sende dokumentet til hvilken som helst Stream. Så kan du jo bare sende det til output streamen på ASP.NET siden og sætte ContentType til pdf.
Det er vel sådan set ligegyldigt hvornår man sætter ContentType, hvis mit eksempel bliver skrevet i Page_Load?! Det er først senere (omkring Render) at output streamen bliver udskrevet.
Content-Disposition er også fornuftigt at have med - det vil jeg give dig ret i! Jeg havde bare glemt den :-(
Protected Sub Page_Load() Dim document As Document = New Document() PdfWriter.getInstance( document, Response.OutputStream ) document.Open() document.Add( New Paragraph("Hello World" ) ) document.Close()
Du får vist ca. samme problemer som hvis du sender filen direkte til brugeren (uden om .NET). Der sker jo ikke andet en at output streamen bliver kørt gennem .NET ...
Jeg har kørt ret store filer (installationspakker) ud til brugere over web på denne måde, uden de store problemer. Og .zip pakkerne blev endda hentet fra Sharepoint!
Det virker perfekt. Er der mulighed for at kunne definere navnet på den fil der streames til brugeren ?
Så mangler der det med mailen. Jeg er ikke interesseret i løsningen med at lave en fil som så skal slettes. Jeg vil gerne kunne streame direkte til en mail som så sendes.
Beklager meget, men jeg er ikke så skarp til det. Det med filnavnet, hvordan ser kodelinien ud til det ?
Og det med stream kan jeg ikke lige få til at funke. Hvordan skal det sættes sammen ? Jeg har fået den til at sende en mail med vedhæftet fil:
Dim Msg As New MailMessage() Dim MailObj As New SmtpClient("mail.test.dk")
Msg.From = New MailAddress("mail@test.dk", "Test") Msg.To.Add(New MailAddress("mail@test.dk", "test1")) Msg.IsBodyHtml = "False" Msg.Body = "Tekst i mail" Msg.Subject = "Emnefelt" Dim d As New Attachment("temp.pdf") Msg.Attachments.Add(d) MailObj.Send(Msg)
Hvordan får man stream'en ned i mailen og evt. med et defineret filnavn ?
Response.AddHeader "Content-Disposition", "inline; filename=filnavn.pdf" for at få browseren til at downloade filen skrives: Response.AddHeader "Content-Disposition", "attachment; filename=filnavn.pdf"
Dim document = New Document() PdfWriter.GetInstance(document, Response.OutputStream) document.Open() document.Add(New Paragraph("Hello World i mail")) document.Close()
Dim Msg As New MailMessage() Dim MailObj As New SmtpClient("mail.test.dk")
Msg.From = New MailAddress("mail@test.dk", "Test") Msg.To.Add(New MailAddress("webmaster@test.dk", "test1")) Msg.IsBodyHtml = "False" Msg.Body = "Tekst i mail" Msg.Subject = "Emnefelt" Dim d = New Attachment(Response.OutputStream, "application/pdf")
Msg.Attachments.Add(d) MailObj.Send(Msg)
Kan ikke lige se hvilket der er galt. Det virker ikke, den skriver at "Specified method is not supported"
Her rettet en linie til: Dim d = New Attachment(Response.OutputStream, "ttt.pdf", System.Net.Mime.MediaTypeNames.Application.Pdf) Det går galt i selve Msg.Attachment.Add(d). HVis den remmes ud er der ingen problemer (men heller ingen attachment ;-)
Dim document = New Document() Dim m As New System.IO.MemoryStream() PdfWriter.GetInstance(document, Response.OutputStream) document.Open() document.Add(New Paragraph("Hello World i mail")) document.Close()
Dim Msg As New MailMessage() Dim MailObj As New SmtpClient("mail.mailserver.dk")
Msg.From = New MailAddress("mail@test.dk", "Test") Msg.To.Add(New MailAddress("webmaster@test.dk", "test1")) Msg.IsBodyHtml = "False" Msg.Body = "this is the Email body" Msg.Subject = "This is the Subject" Dim d = New Attachment(Response.OutputStream, "ttt.pdf", System.Net.Mime.MediaTypeNames.Application.Pdf)
Msg.Attachments.Add(d) MailObj.Send(Msg)
Og fejlkoden når man prøver det ser således ud:
Server Error in '/' Application. --------------------------------------------------------------------------------
Specified method is not supported. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NotSupportedException: Specified method is not supported.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Gem dit PDF til en MemoryStream, hiv et byte array ud af den, kopier det byte array til Response.Output, wrap det byte array i en ny MemoryStream og angive den til Attachment,
... Dim ms1 As MemoryStream = New MemoryStream() ... PdfWriter.GetInstance(document, ms1) ... Dim b() As Byte = ms1.ToArray() Response.BinaryWrite(b) ... Dim ms2 As MemoryStream = New MemoryStream(b) Dim d As Attachment = New Attachment(ms2, "ttt.pdf", System.Net.Mime.MediaTypeNames.Application.Pdf) ...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.