Word 2007 COM - Can't directly access a page when word is set to invisible
- by Robbie
I'm using Word 2007 via COM from PHP 5.2 Apache 2.0 on a windows machine. The goal is to programmatically render jpeg thumbnails from each page in a Word document.
The following code works correctly if you set $word-Visible to 1:
try {
    $word = new COM('word.application');
    $word->Visible = 0;
    $word->Documents->Open("C:\\test.doc");
    echo "Number of pages: " . $word->ActiveDocument->ActiveWindow->ActivePane->Pages->Count() . "</br>";
    $i = 1;
    foreach ($word->ActiveDocument->ActiveWindow->ActivePane->Pages as $page) {
        echo "Page number: $i </br>";
        $i++;
    }
    //get the EMF image of the page
    $data = $word->ActiveDocument->ActiveWindow->ActivePane->Pages->Item(3)->EnhMetaFileBits;
    $word->ActiveDocument->Close();
    $word->Quit();
} catch (Exception $e) {
    echo "Exception: " .$e->getMessage();
}
The test document I'm using contains 35 pages. The code will display the correct number of pages but the for each loop only loops over 1 page. I can only directly access page 1 and 2 in the Pages-Item() collection. If I try to access another page I get the exception: "The requested member of the collection does not exist."
If I set the $word-Visible property to 1 I do get all the pages in the foreach loop and I can access any page directly. Everything is working as expected if Word is set to be visible.
Even stranger is the fact that if I set Word to be invisible and I don't have the foreach loop I can only access page 1 instead of page 1 and 2 if I do the for each loop.
Any pointers on how I can access all the pages in the document and keeping word invisible?