C# 使用iText读取存储在图像列中的PDF文件
我将pdf文件存储在sql server数据库的图像列中。我想将每个文件的内容读入我可以用来搜索C# 使用iText读取存储在图像列中的PDF文件,c#,itext,C#,Itext,我将pdf文件存储在sql server数据库的图像列中。我想将每个文件的内容读入我可以用来搜索string.Contains(“我正在寻找的内容”) 我有以下代码: if (conn.State != ConnectionState.Open) { conn.Open(); } SqlCommand cmd = new SqlCommand("Select top 10 pdfData from Repo
string.Contains(“我正在寻找的内容”)
我有以下代码:
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlCommand cmd = new SqlCommand("Select top 10 pdfData from Reports_Converted with (nolock)");
cmd.Connection = conn;
using (SqlDataReader sdr = cmd.ExecuteReader())
{
if (sdr.Read())
{
byte[] fileData = (byte[])sdr.GetValue(0);
iTextPDF.PdfReader fileFromDpPdfReader = new iTextPDF.PdfReader(fileData);
for (int page = 1; page <= fileFromDpPdfReader.NumberOfPages; page++)
{
IXmlTextParser.ITextExtractionStrategy strategy = new IXmlTextParser.SimpleTextExtractionStrategy();
string currentText = IXmlTextParser.PdfTextExtractor.GetTextFromPage(fileFromDpPdfReader, page, strategy);
currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8,
Encoding.Default.GetBytes(currentText)));
pdfTextFromDatabase.Append(currentText);
}
finalTextResultFromDatabase = pdfTextFromDatabase.ToString();
}
}
到目前为止,我在堆栈中找到的答案都是关于物理文件的,而不是从数据库中提取pdf的情况。当pdf文件存储在图像列(即SQL_LONGVARBINARY)中时,数据格式已经更改。 因此,当有人将它们读回时,在验证预期的文件格式时,很有可能会失败 可能,处理这种情况的另一种方法是,首先创建所需格式的临时文件,然后读取该临时文件
byte[] fileData = (byte[])sdr.GetValue(0);
FileStream fs = new FileStream(@"C:\Users\XXXXXX\AppData\Local\Temp\temp.pdf", FileMode.Create);
fs.Write(fileData , 0, fileData.Length);
fs.Close();
iTextPDF.PdfReader fileFromDpPdfReader = new iTextPDF.PdfReader(@"C:\Users\XXXXXX\AppData\Local\Temp\temp.pdf");
当pdf文件存储在图像列(即SQL_LONGVARBINARY)中时,数据格式已经更改。 因此,当有人将它们读回时,在验证预期的文件格式时,很有可能会失败 可能,处理这种情况的另一种方法是,首先创建所需格式的临时文件,然后读取该临时文件
byte[] fileData = (byte[])sdr.GetValue(0);
FileStream fs = new FileStream(@"C:\Users\XXXXXX\AppData\Local\Temp\temp.pdf", FileMode.Create);
fs.Write(fileData , 0, fileData.Length);
fs.Close();
iTextPDF.PdfReader fileFromDpPdfReader = new iTextPDF.PdfReader(@"C:\Users\XXXXXX\AppData\Local\Temp\temp.pdf");
问题是由于文件正在压缩。不知何故,我错过了这个小玩意儿,但一旦我解压缩了数据,一切都很好 问题是由于文件被压缩。不知何故,我错过了这个小玩意儿,但一旦我解压缩了数据,一切都很好 您可能无法将PDF读入字符串,因为PDF允许任意二进制内容,而字符串不允许。此外,PDF不一定将字符串存储为ASCII或Unicode字符序列。@DourHighArch当我在本地文件上调用此方法时,它会将其转换为我可以搜索的字符串<代码>GetTextFromPage(fileFromDpPdfReader,page,strategy)代码>您可能无法将PDF读入字符串,因为PDF允许任意二进制内容,而字符串不允许。此外,PDF不一定将字符串存储为ASCII或Unicode字符序列。@DourHighArch当我在本地文件上调用此方法时,它会将其转换为我可以搜索的字符串<代码>GetTextFromPage(fileFromDpPdfReader,page,strategy)好主意,我来试试看!如果您将pdf存储在此处建议的文件系统中,是否可以检查是否可以在pdf查看器中打开它?好主意,我将尝试一下!如果您将pdf存储在此处建议的文件系统中,是否可以检查是否可以在pdf查看器中打开它?