chilipadiboy Ответов: 2

Преобразование MSG в PDF программно


Привет кодеры,

Поэтому у меня есть проблема с преобразованием MSG в PDF-файлы. Вот мой код в настоящее время:
If TypeOf objItem Is Outlook.MailItem Then
                Dim EmailMessages As String = "EmailMessages"
                If Not Directory.Exists(strDest + "\" + EmailMessages) Then
                    Directory.CreateDirectory(strDest + "\" + EmailMessages)
                End If

                'save it as MSG (native)
                MItem = CType(objItem, Outlook.MailItem)
                Dim rTime As String = Format(MItem.ReceivedTime, "dd.MMM.yyyy (hh.mm.ss tt)")

                MItem.SaveAs(strFolderPath & "\" + MItem.SenderName.ToString + " " + rTime + ".msg", Outlook.OlSaveAsType.olMSG)

                'save it as PDF
                MItem.SaveAs(strFolderPath & "\" + MItem.SenderName.ToString + " " + rTime + ".html", Outlook.OlSaveAsType.olHTML)
                strPathPDF = strFolderPath & "\" + MItem.SenderName.ToString + " " + rTime
                wordDoc = wordApp.Documents.Open(strPathPDF + ".html")
                wordDoc.ExportAsFixedFormat(strPathPDF + ".pdf", Word.WdExportFormat.wdExportFormatPDF)
                wordDoc.Close()
End If



MITEM-это мой заполнитель для MailItems.

Проблема в том, что я хочу сделать это непосредственно из MSG в PDF. Я понимаю, что это невозможно только с Ms Office. Я наткнулся на Foxit PDF creator, который по сути является драйвером принтера, который может распечатывать PDF-файлы в файл. Это здорово, но метод Printout() не принимает никаких аргументов, поэтому я ограничиваюсь вводом имени файла, выбором каталога и нажатием кнопки Сохранить вручную. Я не хочу этого делать. Есть ли способ пройти мимо этой печатной штуки? Или еще лучше, есть ли способ сделать это без какого-либо стороннего программного обеспечения? Любая помощь будет оценена по достоинству :D

С уважением,

Адиб

2 Ответов

Рейтинг:
1

Prahlad Yeri

Вы можете взглянуть на PDFSharp - http://pdfsharp.codeplex.com/[^].

Кстати, в приведенном ниже коде почему вы не сохраняете непосредственно в pdf, а не в HTML-формате? Разве в OLSaveAsType нет другого варианта?

- сохраните его в формате PDF
Митем.SaveAs(strFolderPath & "\" + MItem.SenderName.Метод toString + "" + сайт rtime + ".HTML-код", прогноз.OlSaveAsType.olHTML)


chilipadiboy

Привет Прахлад,

Нет, в Outlook нет прямого способа, по крайней мере, сохранить его в формате pdf. Кроме того, печать не принимает аргументы, поэтому я не могу использовать pdf-файл для файла драйвера принтера. Я думаю, что мог бы создать PDF-файл, но метаданные, найденные в файлах MSG, вероятно, будут потеряны.

С уважением,

Адиб

Рейтинг:
0

Maciej Los

чилипадибой[^] писанное:
Я уже сталкивался с этим Foxit PDF creator это, по сути, драйвер принтера, который может распечатывать PDF-файлы в файл. Это великое все но Printout() метод не принимает никаких аргументов (...)


Ну, даже если вы не можете передать параметры в PrintOut() метод, вы можете распечатать электронную почту Foxit PDF creator с помощью Процесс.метод Start[^]. Примечание: сначала вам нужно будет сохранить электронную почту в виде файла *.doc или *.rtf! Система будет использовать приложение по умолчанию, которое связано с этим файлом, чтобы открыть его. Таким образом, принтер по умолчанию должен быть установлен на Foxit PDF Creator.
Dim psi As New ProcessStartInfo
PrintPDF.UseShellExecute = True
PrintPDF.Verb = "print"
PrintPDF.WindowStyle = ProcessWindowStyle.Hidden
PrintPDF.FileName = sFullFileName 'file Name including path, name and extension
Process.Start(psi)


Для получения более подробной информации о печати документов с помощью Process.Start метод, пожалуйста, обратитесь к этому: Как молча печатать PDF-файлы с помощью Adobe Reader и C#[^]


Другой способ-это печать MailItem.Body[^] пользуясь Класс PrintDocument (System.Рисование.Печать) | Microsoft Docs[^]. Затем вы сможете распечатать этот документ непосредственно в Foxit PDF Creator. Обратите внимание, что Body возвращает строковое представление тела открытого текста элемента Outlook. Итак, в зависимости от Сообщения.Свойство BodyFormat (Outlook) | Microsoft Docs[^] вы получите один из трех форматов основного текста: обычный текст, форматированный текст (RTF) и HTML.


Richard MacCutchan

Вы обратили внимание на дату этого вопроса?

Maciej Los

Нет... - Спасибо, Ричард.
Этот вопрос не имеет общепринятого ответа, поэтому я решил оставить свой ответ. Я надеюсь, что это кому-то пригодится.