使用itextsharp在ftp服务器上提取pdf文件
本文关键字:提取 pdf 文件 服务器 itextsharp ftp 使用 | 更新日期: 2023-09-27 17:57:08
我正在从事文档管理项目,我想从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
时,将检查它是否是磁盘上的文件,如果不是,则检查它是否可以作为file:/
、http://
或https://
链接之一转换为Uri
。这是您的第一个故障点,因为这些检查都不处理 ftp 协议,并且您最终会使用不适合您的本地资源加载程序。
您可以尝试将string
转换为显式Uri
但这实际上也不起作用:
//This won't work
new PdfReader(new Uri(path))
这不起作用的原因是因为iText告诉.Net在加载远程资源时使用CredentialCache.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
构造函数。