我正在从事文件管理项目,我想从pdf中提取文本。我怎么能做到这一点。我正在使用Itextsharp在本地系统上提取pdf
这是我用于此目的的功能。路径是FTP服务器路径
public static string ExtractTextFromPdf(string path)
{
using (PdfReader reader = new PdfReader(path))
{
StringBuilder text = new StringBuilder();
for (int i = 1; i <= reader.NumberOfPages; i++)
{
text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
}
return text.ToString();
}
}
引发异常
'ftp:\\###\index\500199.pdf not found as file or resource.'
[###是我的ftp服务器]
PdfReader
有一堆构造函数重载,但大多数重载依赖于RandomAccessSourceFactory
将传递的任何内容转换为Stream
格式。当你传递一个string
在它被检查,如果它是磁盘上的一个文件,如果不检查,如果它可以被转换成Uri
为一个file:/
,http://
或https://
链接。这是您的第一个失败点,因为这些检查均未处理ftp协议,最终您最终遇到了对您不起作用的本地资源加载器。
您可以尝试将其转换string
为显式,Uri
但实际上不起作用,或者:
//This won't work
new PdfReader(new Uri(path))
之所以不起作用,是因为iText告诉.NetCredentialCache.DefaultCredentials
在加载远程资源时使用,但是FTP世界中不存在该概念。
长话短说,使用FTP时,您需要自己下载文件。根据它们的大小,您需要将它们下载到磁盘或下载字节数组。以下是后者的示例:
Byte[] bytes;
if( path.StartsWith(@"ftp://")) {
var wc = WebRequest.Create(path);
using (var response = wc.GetResponse()) {
using (var responseStream = response.GetResponseStream()) {
bytes = iTextSharp.text.io.StreamUtil.InputStreamToArray(responseStream);
}
}
}
然后,您可以将本地文件或字节数组传递给PdfReader
构造函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句