使用 itextsharp 在 ftp 服务器上提取 pdf 文件
Extract pdf file on ftp server using itextsharp
我正在从事文档管理项目,我想从 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:\###\index0199.pdf not found as file or resource.'
[### 是我的 ftp 服务器]
PdfReader
有一堆构造函数重载,但其中大部分依赖于 RandomAccessSourceFactory
to convert whatever is passed in into a Stream
format. When you pass a string
in it is checked if it is a file on disk and if not it is checked if it can be converted to a Uri
as one of file:/
, http://
or https://
link. This is your first point of failure because none of these checks handle the ftp protocol and you ultimately end up at a local resource loader,这对你不起作用。
您 可以 尝试将您的 string
转换为显式 Uri
但这实际上也行不通:
//This won't work
new PdfReader(new Uri(path))
这行不通的原因是 iText tells .Net to use 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
构造函数。
我正在从事文档管理项目,我想从 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:\###\index0199.pdf not found as file or resource.'
[### 是我的 ftp 服务器]
PdfReader
有一堆构造函数重载,但其中大部分依赖于 RandomAccessSourceFactory
to convert whatever is passed in into a Stream
format. When you pass a string
in it is checked if it is a file on disk and if not it is checked if it can be converted to a Uri
as one of file:/
, http://
or https://
link. This is your first point of failure because none of these checks handle the ftp protocol and you ultimately end up at a local resource loader,这对你不起作用。
您 可以 尝试将您的 string
转换为显式 Uri
但这实际上也行不通:
//This won't work
new PdfReader(new Uri(path))
这行不通的原因是 iText tells .Net to use 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
构造函数。