我正在使用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
如果我错过了一些明显的东西,很多道歉。