如何将流转换为pdf页面?

问题描述 投票:0回答:1

我必须将流(由包含pdf的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;
        }
    }
}

[对this question here的回答。有办法吗?

c# pdf stream pdfsharp
1个回答
0
投票

据我所知,您需要从流中创建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(page.ExtractText());
}
© www.soinside.com 2019 - 2024. All rights reserved.