CatZMedlem sedan jan. 20022 440 inläggJag använder CrystalReports för att generera order i pdf format. Det funkar fantastiskt bra. Nu vill jag kunna emaila pdf filen till diverse företag eftersom vissa verkar föredra att få sina order på det viset! Problemet blir att då måste jag skapa pdf filen fysiskt. Sedan när mailet är skickat så ska jag tabort pdf filen och får då att System.IO.IOException Bummer with the access!
Försöker med IO.File.Delete(strFileName)
Ibland är det webläsaren som låser pdf filen och ibland verkar det vara Visual Studio 2005 som låser filen. Några tips på hur man ska göra? Ska jag skapa någon form av funktion som tar bort gamla pdf filer innan användaren skapar och emailar en ny?
Några förslag? Känner mig lite vilsen :)
CatZMedlem sedan jan. 20022 440 inlägg Private Sub EmptyTemp()
Dim temp As String = "C:\Inetpub\root\temp\"
Dim files() As String = Directory.GetFiles(temp)
Dim f As String
For Each f In files
Dim filename As String = Path.GetFileName(f)
If File.Exists(filename) = True Then
File.Delete(filename)
End If
Next
End Sub
Den här funktionen gör ju ingenting!? Hur ska jag kunna loopa igenom alla filer i en mapp och ta bort dom??
CatZMedlem sedan jan. 20022 440 inläggSub Page_Load()
grid1.DataSource = System.IO.Directory.GetFiles("C:\Inetpub\root\temp")
grid1.DataBind()
End Sub
<asp:DataGrid
ID="grid1"
Cellpadding="10"
Runat="Server" />
Den koden fungerar! Nu ska jag försöka ta bort filerna också :)
EemissionMedlem sedan dec. 19996 721 inlägg Jag skulle nog hellre försöka se till att det aldrig skapas någon fil, om det är tillämpligt i ditt fall. Använd ExportToStream på Crystal-rapporten och någon av stream-konstruktorerna på Attachment.
CatZMedlem sedan jan. 20022 440 inläggSka man eposta en pdf fil måste den väl skapas först? Ska kolla på vad du sa imorn. Klockan är 2 am här snart! :D
EemissionMedlem sedan dec. 19996 721 inlägg
CatZ skrev:
Ska man eposta en pdf fil måste den väl skapas först?
Ja, men den behöver aldrig lagras fysiskt.
GGladhMedlem sedan maj 20012 812 inlägg Precis som emisson säger så är din file endast en bytearray som finns i minnet. Så om du skapar en pdf-fil i kod eller om du läser upp den från disken så ser den likadan ut i minnet, så det du vill är att skicka denna bytearray till attachment i ditt mail.
- M
CatZMedlem sedan jan. 20022 440 inläggDim strStream As New System.IO.BinaryReader( crReportDocument.ExportToStream( CrystalDecisions.[Shared].ExportFormatType.PortableDocFormat ) )
' Create the output pdf file
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/pdf"
Response.BinaryWrite(strStream.ReadBytes(strStream.BaseStream.Length))
Response.Flush()
Response.Close()
Det där ska väl fungera, men hur tusan hämtar jag den här till mitt email attachment nu då?
EemissionMedlem sedan dec. 19996 721 inlägg
emission skrev:
Använd ExportToStream på Crystal-rapporten och någon av stream-konstruktorerna på Attachment.
http://msdn2.microsoft.com/en-us/library/k5zs6xxh(vs.80).aspx
CatZMedlem sedan jan. 20022 440 inläggTack emission! Mitt problem just nu är att jag inte är så avancerad att jag klarar att ta till mig av MSDN's dokumentation av asp.net än. ASP går bra nu men det hjälper ju inte mig ;)
Jag har för närvarande 3 funktioner. En för när användaren klickar på skicka epost en för att hämta pdf filen och en för att slutligen skicka epostmeddelandet!
- onClick_Send
- pdfToStream
- emailOrder
Just nu fattar jag inte hur jag ska få ihop det. Förut hämtade jag filnamnet och skickade det vidare med:
' Create the PDF order
strFileName = myutils.PdfToStream(Request.QueryString("OrderId"))
' Email the order
myResult = myutils.EmailOrder(Me.txtTo.Text, Me.txtFrom.Text, Me.txtSubject.Text, Me.txtMessage.Text, strFileName)
Istället för måste jag ju bygga ihop filen då? Jag har ju redan skapat en stream men hur ska man sätta ihop det till en fil?