从PDF电子邮件附件中提取文本而不首先将附件保存到pdf文件

时间:2016-08-21 15:05:48

标签: vb.net email pdf attachment pdf-extraction

我正在使用PDF Extractor(来自here)从电子邮件中的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

如果我错过了一些明显的东西,很多道歉。

0 个答案:

没有答案