Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Itextsharp iText GetTextFromPage返回每个页面开头的文本_Itextsharp - Fatal编程技术网

Itextsharp iText GetTextFromPage返回每个页面开头的文本

Itextsharp iText GetTextFromPage返回每个页面开头的文本,itextsharp,Itextsharp,我有这个简单的作品。问题很奇怪——在每次迭代中,读者都会返回自pdf文档开始以来的全部文本。 也许这很简单,但我看不出来 ... PdfReader reader = new PdfReader ( path ); PdfReaderContentParser parser = new PdfReaderContentParser ( reader ); ... public void Read(int start, int end) { ITextExtractionStrategy

我有这个简单的作品。问题很奇怪——在每次迭代中,读者都会返回自pdf文档开始以来的全部文本。 也许这很简单,但我看不出来

...
PdfReader reader = new PdfReader ( path );
PdfReaderContentParser parser = new PdfReaderContentParser ( reader );
...
public void Read(int start, int end)
{
    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

    StringBuilder sb = new StringBuilder();

    for (int page = start; page < end; page++)
    {
        try
        {
            sb.Append(PdfTextExtractor.GetTextFromPage(reader, page, strategy));
        }
        catch (Exception ex)
        {
            throw new PdfException(ex.Message, ex.InnerException);
        }

        var p = new Page { Number = page, Content = sb.ToString()};
        sb.Clear();
        PageParsed?.Invoke(this, new PdfEventArgs<Page>(p));
    }
    FileParsed?.Invoke(this, new PdfEventArgs<string>(string.IsNullOrEmpty(Name) ? "File parsed" : Name));
}
。。。
PdfReader reader=新PdfReader(路径);
PdfReaderContentParser=新的PdfReaderContentParser(读取器);
...
公共无效读取(整数开始,整数结束)
{
ITextractionStrategy策略=新的SimpleTextractionStrategy();
StringBuilder sb=新的StringBuilder();
对于(int page=start;page
对象保持状态,因此必须在循环中移动对象实例化,如下所示:

StringBuilder sb = new StringBuilder();

for (int page = start; page < end; page++)
{
    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
    try
    {
        sb.Append(PdfTextExtractor.GetTextFromPage(reader, page, strategy));
    }
    catch (Exception ex)
    {
        throw new PdfException(ex.Message, ex.InnerException);
    }

    var p = new Page { Number = page, Content = sb.ToString()};
    sb.Clear();
    PageParsed?.Invoke(this, new PdfEventArgs<Page>(p));
}
StringBuilder sb=新建StringBuilder();
对于(int page=start;page

这将解决您的问题。

谢谢,真的很简单。“此渲染器跟踪每个字符串的当前Y位置。”从API文档中,这一点并不清楚。谢谢,我也遇到了同样的问题,并在这里找到了解决方案。不过,发现一个策略对象保持状态对我来说有点违反直觉。