У меня есть файлы PDF, хранящиеся в столбце изображения в базе данных сервера SQL. Я хочу прочитать содержимое каждого файла во что-то (строка - это то, что я использую, но открыт для предложений), которую я могу использовать для поиска в string.Contains("what I am looking for")
У меня есть следующий код:
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();
}
}
В качестве другого пункта, у меня есть похожий код, где я могу прочитать файл прямо из папки на моем ноутбуке. Проблема возникает только при извлечении из базы данных.
Я вижу ошибку iTextSharp.text.exceptions.InvalidPdfException: 'PDF header signature not found.'
в этой строке кода:
iTextPDF.PdfReader fileFromDpPdfReader = new iTextPDF.PdfReader(fileData);
Ответы, которые я нашел здесь, в стеке, касаются физического файла, а не сценария, в котором pdf извлекается из базы данных.