hello，

When I used podofo 0.10.2's `ExtractTextTo` function to extract the following three PDF files created by Ms Word, I found that the extraction time increased exponentially as the number of pages increased linearly:
[t20.pdf](https://github.com/podofo/podofo/files/14783537/t20.pdf)
[t1.pdf](https://github.com/podofo/podofo/files/14783535/t1.pdf)
[t10.pdf](https://github.com/podofo/podofo/files/14783536/t10.pdf)
t1. pdf is a 21 page PDF file that costs 2s to extract;
t1 Copy 10 copies of the PDF to get t10. pdf. Pdf, it takes about 70s to extract;
t1 Copy the contents of the PDF 20 copies to get t20. PDF, it takes about 300s to extract;

I further apply the following code to t20.pdf was tested and found that even within the same file, the larger the page number, the more time was consumed by `GetPageAt`, `ExtractTextTo`.  The code runs in VS2019 Release x64.
   ```
    TimerBase tb; 
    tb.Start();
    int skp = 63; //By only extracting 21 times the page number, to ensure that the page number of each extraction is the same
    for (unsigned i = 0; i < pages.GetCount(); i++)
    {
        if (skp * i >= pages.GetCount())
        {
            break;
        }
        auto et11 = tb.PrintElapsedMs();
        auto& page = pages.GetPageAt(skp * i);
        auto et22 = tb.PrintElapsedMs();
        std::cout << "page：" << skp * i << ",GetPageAt cost: " << (et22 - et11) / 1000.0 << "s" << std::endl;

        vector<PdfTextEntry> entries;

        auto et1 = tb.PrintElapsedMs();
        page.ExtractTextTo(entries);
        auto et2 = tb.PrintElapsedMs();
        std::cout <<"page："<< skp *i << ", ExtractTextTo cost: " << (et2 - et1)/1000.0 << "s" << std::endl;
        std::cout <<  std::endl;
    }
```
The results of the extraction are as follows:
![image](https://github.com/podofo/podofo/assets/72743757/58ba2cde-2019-433f-9cd4-8932cd5488dd)

Looking at the time-consuming difference  between `ExtractTextTo `and `GetPageAt` on each page, you can see that it is basically the same, so presumably there is a similar operation in both, assuming P, where p takes up most of the parsing time, and the cost increases with the page number, and the difference is the real page resolution time.
![image](https://github.com/podofo/podofo/assets/72743757/77b0f928-1801-43f1-9120-3cce20935abe)

Looking at the source code for `GetPageAt`  , it looks like the time it took to get each page should be similar.

GetPageAt;ExtractTextTo: When the number of PDF pages increases linearly, the cost of both methods increases exponentially
This is a GitHub Issue
repo:podofo
owner:podofo
Title : GetPageAt;ExtractTextTo: When the number of PDF pages increases linearly, the cost of both methods increases exponentially
Issue date:

--- start body ---
hello，

When I used podofo 0.10.2's `ExtractTextTo` function to extract the following three PDF files created by Ms Word, I found that the extraction time increased exponentially as the number of pages increased linearly:
[t20.pdf](https://github.com/podofo/podofo/files/14783537/t20.pdf)
[t1.pdf](https://github.com/podofo/podofo/files/14783535/t1.pdf)
[t10.pdf](https://github.com/podofo/podofo/files/14783536/t10.pdf)
t1. pdf is a 21 page PDF file that costs 2s to extract;
t1 Copy 10 copies of the PDF to get t10. pdf. Pdf, it takes about 70s to extract;
t1 Copy the contents of the PDF 20 copies to get t20. PDF, it takes about 300s to extract;

I further apply the following code to t20.pdf was tested and found that even within the same file, the larger the page number, the more time was consumed by `GetPageAt`, `ExtractTextTo`.  The code runs in VS2019 Release x64.
   ```
    TimerBase tb; 
    tb.Start();
    int skp = 63; //By only extracting 21 times the page number, to ensure that the page number of each extraction is the same
    for (unsigned i = 0; i < pages.GetCount(); i++)
    {
        if (skp * i >= pages.GetCount())
        {
            break;
        }
        auto et11 = tb.PrintElapsedMs();
        auto& page = pages.GetPageAt(skp * i);
        auto et22 = tb.PrintElapsedMs();
        std::cout << "page：" << skp * i << ",GetPageAt cost: " << (et22 - et11) / 1000.0 << "s" << std::endl;

        vector<PdfTextEntry> entries;

        auto et1 = tb.PrintElapsedMs();
        page.ExtractTextTo(entries);
        auto et2 = tb.PrintElapsedMs();
        std::cout <<"page："<< skp *i << ", ExtractTextTo cost: " << (et2 - et1)/1000.0 << "s" << std::endl;
        std::cout <<  std::endl;
    }
```
The results of the extraction are as follows:
![image](https://github.com/podofo/podofo/assets/72743757/58ba2cde-2019-433f-9cd4-8932cd5488dd)

Looking at the time-consuming difference  between `ExtractTextTo `and `GetPageAt` on each page, you can see that it is basically the same, so presumably there is a similar operation in both, assuming P, where p takes up most of the parsing time, and the cost increases with the page number, and the difference is the real page resolution time.
![image](https://github.com/podofo/podofo/assets/72743757/77b0f928-1801-43f1-9120-3cce20935abe)

Looking at the source code for `GetPageAt`  , it looks like the time it took to get each page should be similar.

--- end body ---

None