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

时间:2014-05-09 09:58:03

标签: php pdf powerpoint docx doc

我想在PHP应用程序中使用此功能:

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

但不使用exec()功能。

2 个答案:

答案 0 :(得分:3)

可以在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文档是另一回事。你会在这里找到一些关于这样做的讨论:How to get the number of pages in a Word Document on linux?

对于PDF文件,我更喜欢使用FPDI,即使它需要许可证来解析较新的PDF文件格式。您可以像这样使用它:

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;
}

答案 1 :(得分:1)

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

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