Ms word 将电子邮件转换为PDF

Ms word 将电子邮件转换为PDF,ms-word,Ms Word,我花了很多精力试图将电子邮件转换成PDF 我使用的是Delphi10.4,尽管这与问题无关 我想出了一个解决方案,包括以任何格式从电子邮件中提取正文(HTML、RTF或TXT)。如果电子邮件是MSG格式,我使用INDY进行此操作或Outlook 然后,我将正文保存到文件中,并通过自动化使用msword打开它。然后,只需将Word文档保存为PDF格式 然而,msword似乎不能很好地读取html文件 从我尝试过的大量电子邮件样本中,我遇到了几个难以解决的问题 示例: html表格扩展到文档页面宽

我花了很多精力试图将电子邮件转换成
PDF

我使用的是
Delphi10.4
,尽管这与问题无关

我想出了一个解决方案,包括以任何格式从电子邮件中提取正文(
HTML
RTF
TXT
)。如果电子邮件是
MSG
格式,我使用
INDY
进行此操作或
Outlook

然后,我将正文保存到文件中,并通过自动化使用
msword
打开它。然后,只需将
Word
文档保存为
PDF
格式

然而,
msword
似乎不能很好地读取
html
文件

从我尝试过的大量电子邮件样本中,我遇到了几个难以解决的问题

示例:

  • html
    表格扩展到文档页面宽度之外。我通过计算页面宽度来解决这个问题,将有问题的表的宽度设置为固定的,并将其设置为页面宽度,最后根据新的宽度按比例调整其列的大小
  • 在我尝试处理带有
    html
    表格的电子邮件之前,这种方法一直很有效,每行的列数/单元格数都不同。那会导致撞车。我通过处理异常,逐行遍历每个表,并使用其单元格而不是列来解决这个问题
  • 表格单元格中的图像通常与单元格和页面宽度重叠。通过迭代所有
    InlineShapes
    ,检查它们是否在表中,如果在表中,则将其宽度设置为单元格宽度来解决
还有其他的问题,但我现在有了一些东西,它似乎在一堆完全不同的电子邮件上运行得很好

但我认为很有可能会不时出现新的问题,因为这个程序是在无监督的情况下处理成批电子邮件的,这是一个令人担忧的问题


所以我的问题是,有人知道更好的处理方法吗?例如,是否有一些简单的方法可以让Word在加载时“很好地”格式化
html
,以便它以可读的方式显示并保存到
PDF
,类似于在
Outlook

中打开同一封电子邮件时的外观。您是否尝试过使用Outlook Inspector对象的WordEditor属性?这将返回邮件的Microsoft Word文档对象模型,您可以从该模型直接导出为PDF

这是一个基本的例子

Private Sub Demo()
    Dim MailItem As MailItem
    Dim FileName As String
    
    FileName = "C:\Users\Sam\Desktop\Email.pdf"
    
    Set MailItem = ActiveExplorer.Selection.Item(1)
    
    With MailItem.GetInspector
        .WordEditor.ExportAsFixedFormat FileName, 17
        .Close 0
    End With
    
    MsgBox "Export complete"
End Sub

嗨,马克,自从你提到你使用Delphi,你有没有试过使用Synopse mORMot report?您可以查看以下关于HTML和PDF之间转换的帖子。由于其他原因,Synopse在我要查看的工具列表中,但还没有时间这样做。为了这个目的,我也会看一看。我不知道。这很有用,我会在MSG文件中试用,虽然它不能解决非MSG邮件的问题。