### *This question is for referencing and comparing. The solution is [the accepted answer below](https://stackoverflow.com/a/14644354/1062281).*

Many hours have I searched for a fast and easy, but mostly *accurate*, way to get the number of pages in a PDF document. Since I work for a graphic printing and reproduction company that works a lot with PDFs, the number of pages in a document must be precisely known before they are processed. PDF documents come from many different clients, so they aren't generated with the same application and/or don't use the same compression method.

Here are some of the answers I found ***insufficient*** or simply ***NOT working***:

Using [Imagick](http://php.net/manual/en/book.imagick.php) (a PHP extension)
----------------------------------------------------------------------------

Imagick requires a lot of installation, apache needs to restart, and when I finally had it working, it took amazingly long to process (2-3 minutes per document) and it always returned `1` page in every document (haven't seen a working copy of Imagick so far), so I threw it away. That was with both the `getNumberImages()` and `identifyImage()` methods.

Using [FPDI](http://www.setasign.de/products/pdf-php-solutions/fpdi/about/) (a PHP library)
-------------------------------------------------------------------------------------------

FPDI is easy to use and install (just extract files and call a PHP script), **BUT** many of the compression techniques are not supported by FPDI. It then returns an error:

> 
> FPDF error: This document (test\_1.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI.
> 
> 
> 

Opening a stream and search with a regular expression:
------------------------------------------------------

This opens the PDF file in a stream and searches for some kind of string, containing the pagecount or something similar.

```
$f = "test1.pdf";
$stream = fopen($f, "r");
$content = fread ($stream, filesize($f));

if(!$stream || !$content)
    return 0;

$count = 0;
// Regular Expressions found by Googling (all linked to SO answers):
$regex  = "/\/Count\s+(\d+)/";
$regex2 = "/\/Page\W*(\d+)/";
$regex3 = "/\/N\s+(\d+)/";

if(preg_match_all($regex, $content, $matches))
    $count = max($matches);

return $count;

```

* `/\/Count\s+(\d+)/` (looks for `/Count <number>`) doesn't work because only a few documents have the parameter `/Count` inside, so most of the time it doesn't return anything. [Source.](https://stackoverflow.com/a/2314086/1062281)
* `/\/Page\W*(\d+)/` (looks for `/Page<number>`) doesn't get the number of pages, mostly contains some other data. [Source.](https://stackoverflow.com/a/1536494/1062281)
* `/\/N\s+(\d+)/` (looks for `/N <number>`) doesn't work either, as the documents can contain multiple values of `/N` ; most, if not all, **not** containing the pagecount. [Source.](https://stackoverflow.com/a/7462664/1062281)

---

> 
> ### So, what does work reliable and accurate?
> 
> 
> [See the answer below](https://stackoverflow.com/a/14644354/1062281)
> 
> 
>