[英]How to convert a stream that contains a pdf to text?
我正在使用 azure function 來提取 pdf 文件的文本。 我想將 stream (由包含 pdf 的 azure blob 存儲接收)轉換為 pdf 在這里我可以使用這個問題的代碼。
public static class PdfSharpExtensions
{
public static IEnumerable<string> ExtractText(this PdfPage page)
{
var content = ContentReader.ReadContent(page);
var text = content.ExtractText();
return text;
}
public static IEnumerable<string> ExtractText(this CObject cObject)
{
if (cObject is COperator)
{
var cOperator = cObject as COperator;
if (cOperator.OpCode.Name== OpCodeName.Tj.ToString() ||
cOperator.OpCode.Name == OpCodeName.TJ.ToString())
{
foreach (var cOperand in cOperator.Operands)
foreach (var txt in ExtractText(cOperand))
yield return txt;
}
}
else if (cObject is CSequence)
{
var cSequence = cObject as CSequence;
foreach (var element in cSequence)
foreach (var txt in ExtractText(element))
yield return txt;
}
else if (cObject is CString)
{
var cString = cObject as CString;
yield return cString.Value;
}
}
}
有沒有辦法做到這一點?
據我了解,您需要從 stream 創建一個 PDF ,然后使用 PDF 讀取內容。
所以首先我們需要從 MemoryStream 創建一個 PDF,但是等待我們只有一個 Stream 所以我們需要像這樣將它轉換為 MemoryStream:
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[16*1024];
int read;
while((read = input.Read (buffer, 0, buffer.Length)) > 0)
{
output.Write (buffer, 0, read);
}
}
// Create MemoryStream
var ms = new MemoryStream();
CopyStream(streamFromDatabase, ms);
// Create PDF from MemoryStream
var pdf = PdfReader.Open(ms);
現在我們可以像這樣從中讀取文本:
var sb = new StringBuilder();
foreach (var page in pdf.Pages)
{
sb.Append(string.Join("", page.ExtractText().ToArray()));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.