Экспорт отчета VB.net Crystal в html и отправка в виде html почтового тела с использованием outlook - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь отправить содержимое отчета Crystal в виде сообщения электронной почты с помощью приложения Outlook. Вот мой код в VB.net

Imports outlook = Microsoft.Office.Interop.Outlook
Dim a As String = something.ConnectionString
            Dim cryRpt As ReportDocument
            Dim username As String = a.Split("=")(3).Split(";")(0) 'get username
            Dim password As String = a.Split("=")(4).Split(";")(0) 'get password
            cryRpt = New ReportDocument()
            Dim Path As String = Application.StartupPath
            Dim svPath As String = Application.StartupPath & "\PDF"
            If Not Directory.Exists(svPath) Then
                Directory.CreateDirectory(svPath)
            End If
            cryRpt.Load(Path & "\Reports\dr.rpt")
            CrystalReportViewer1.ReportSource = cryRpt
            cryRpt.SetDatabaseLogon(username, password)
            CrystalReportViewer1.Refresh()
            Dim myExportOptions As ExportOptions
            myExportOptions = cryRpt.ExportOptions
            myExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
            myExportOptions.ExportFormatType = ExportFormatType.HTML40 'i tried HTML32 also
            Dim html40FormatOptions As HTMLFormatOptions = New HTMLFormatOptions()
            html40FormatOptions.HTMLBaseFolderName = svPath
            html40FormatOptions.HTMLFileName = "dr.htm"
            html40FormatOptions.HTMLEnableSeparatedPages = False
            html40FormatOptions.HTMLHasPageNavigator = False
            html40FormatOptions.UsePageRange = False
            myExportOptions.FormatOptions = html40FormatOptions
            cryRpt.Export()

    Try
                Dim oApp As outlook.Application
                oApp = New outlook.Application

                Dim oMsg As outlook.MailItem
                oMsg = oApp.CreateItem(outlook.OlItemType.olMailItem)

                oMsg.Subject = txtSubject.Text
                oMsg.BodyFormat = outlook.OlBodyFormat.olFormatHTML
                 oMsg.HTMLBody = ""

                oMsg.HTMLBody = getFileAsString(svPath & "\PoPrt\QuotPrt.html")

                oMsg.To = txtEmailId.Text
                Dim ccArray As New List(Of String)({txtCC1.Text, txtCC2.Text, txtCC3.Text})
                Dim cclis As String = String.Join(",", ccArray.Where(Function(ss) Not String.IsNullOrEmpty(ss)))
                oMsg.CC = cclis
                oMsg.Display(True)
            Catch ex As Exception
                MsgBox("Something went wrong", vbExclamation)
            End Try
            SvFormPanel3.Visible = False

функция

Private Function getFileAsString(ByVal file As String) As String
        Dim reader As System.IO.FileStream
        Try
            reader = New System.IO.FileStream(file, IO.FileMode.Open)
        Catch e As Exception
            MsgBox("Something went wrong. " + e.Message, vbInformation)
        End Try

        Dim resultString As String = ""
        Dim b(1024) As Byte
        Dim temp As UTF8Encoding = New UTF8Encoding(True)

        Do While reader.Read(b, 0, b.Length) > 0
            resultString = resultString & temp.GetString(b)
            Array.Clear(b, 0, b.Length)
        Loop

        reader.Close()
        Return resultString
    End Function

Отчет будет экспортирован в указанное место в виде HTML. И когда мы вручную открываем этот HTML-файл, он прекрасно отображается с границами и всем остальным. Но когда он будет добавлен в виде html тела приложения outlook, форматирование исчезнет и будет разбросано. может кто-нибудь помочь

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Я решил проблему, экспортировав ее в PDF, а затем преобразовав в изображение и вставив в тело письма.

0 голосов
/ 30 сентября 2019

Вы пробовали это?

Откройте outlook, перейдите, Файл> Параметры> Почта

, перейдите в раздел MessageFormat и снимите отметку «Уменьшить размер сообщения, удалив формат ...»

enter image description here

...