2

我正在使用 PDF Extractor(从此处)从电子邮件中的 PDF 附件中获取文本。

在我看来,我可以提取文本的唯一方法是将 PDF 保存到文件中,然后使用代码。

Private Function ReadPdfToStringList(tempfilename As String) As List(Of String)
    Dim extractedText As String
    Using pdfFile As FileStream = File.OpenRead(tempfilename)
        Using extractor As Extractor = New Extractor()
            extractedText = extractor.ExtractToString(pdfFile)
        End Using
    End Using
    DeleteTempFile()
    Return New List(Of String)(extractedText.Split(Chr(13)))
End Function

从 PDF 文件中提取字符串列表。

但是,我似乎无法直接从附件中提取文本。“提取器”似乎无法处理磁盘上文件以外的任何源。

是否有任何可能的方法可以通过创建内存文件流来欺骗“提取器”从内存中打开文件?

我试过使用MemoryStream这样的:

Private Function ReadPdfMemStrmToStringList(memstream As MemoryStream) As List(Of String)
    Dim extractedText As String
    Using extractor As Extractor = New Extractor()
        extractedText = extractor.ExtractToString(memstream)
    End Using
    Return New List(Of String)(extractedText.Split(Chr(13)))
End Function

但是因为提取器假设源是磁盘文件,所以它返回一个错误,说它找不到临时文件。

老实说,我花了很多时间试图理解内存流,但它们似乎不符合要求。

更新

这也是我用来将附件保存到 MemoryStream 的代码。

Private Sub SaveAttachmentToMemStrm(msg As MimeMessage)
    Dim memstrm As New MemoryStream
    For Each attachment As MimePart In msg.Attachments
        If attachment.FileName.Contains("booking") Then
            attachment.WriteTo(memstrm)
        End If
    Next
    'this line only adds the memory stream to a List (of MemoryStream)
    attachments.Add(memstrm)
End Sub

如果我错过了一些明显的东西,我深表歉意。

4

0 回答 0