查找PDF, Docx, Doc, Ppt, Pptx文件的页码与PHP


Find out page numbers of PDF, Docx, Doc, Ppt, Pptx files with PHP

我想在我的PHP应用程序中实现这个功能:

当用户上传文档(PDF, DOCX, DOC, PPT, PPTC扩展)时,则上传后用户获得文档的总页数

但不使用exec()函数

在PHP中可以做一些正确的格式。DOCx和PPTx很容易:

对于Word文件:

function PageCount_DOCX($file) {
    $pageCount = 0;
    $zip = new ZipArchive();
    if($zip->open($file) === true) {
        if(($index = $zip->locateName('docProps/app.xml')) !== false)  {
            $data = $zip->getFromIndex($index);
            $zip->close();
            $xml = new SimpleXMLElement($data);
            $pageCount = $xml->Pages;
        }
        $zip->close();
    }
    return $pageCount;
}

和PowerPoint

function PageCount_PPTX($file) {
    $pageCount = 0;
    $zip = new ZipArchive();
    if($zip->open($file) === true) {
        if(($index = $zip->locateName('docProps/app.xml')) !== false)  {
            $data = $zip->getFromIndex($index);
            $zip->close();
            $xml = new SimpleXMLElement($data);
            print_r($xml);
            $pageCount = $xml->Slides;
        }
        $zip->close();
    }
    return $pageCount;
}

较旧的Office文档则是另一回事。您可以在这里找到一些关于此操作的讨论:如何在linux上获得Word文档中的页数?

对于PDF文件,我更喜欢使用FPDI,尽管它需要一个许可证来解析较新的PDF文件格式。你可以像这样简单地使用do it:

function PageCount_PDF($file) {
    $pageCount = 0;
    if (file_exists($file)) {
        require_once('fpdf/fpdf.php');
        require_once('fpdi/fpdi.php');
        $pdf = new FPDI();                              // initiate FPDI
        $pageCount = $pdf->setSourceFile($file);        // get the page count
    }
    return $pageCount;
}

不幸的是,如果不先对Office文件进行分页,就无法获得它们的页数。如果没有MS Office、OpenOffice等其他应用程序的帮助,这是不可能轻松完成的。更糟糕的是,由于页码的不同,用MS word创建的10页word文档在OpenOffice中可以打开为11页的文档。实际上,要获取.doc文件的总页数,最可靠的解决方案是使用MS Word。您可以通过Office自动化来完成这项工作,但对于计算机来说,这是一项相当昂贵的工作,因为它需要对整个文档进行分页处理。你还需要在电脑/服务器上安装Word。

您可以相对容易地获得PDF文档中的总页数。页数信息很容易以PDF格式访问。大多数PDF解析器/阅读器库都会为您提供一个简单的API。