簡體   English   中英

如何將包含 pdf 的 stream 轉換為文本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM