【问题标题】:PHPWord - Getting a count of pages?PHPWord - 获取页数?
【发布时间】:2016-10-24 03:56:08
【问题描述】:

我正在使用 PHPWord 的模板解析器来制作文档,然后使用命令行自动打印文档。该文件必须在单页上,因为它是一份证书,并且要打印在特殊的纸张上。

我正在添加人名,所以名字较长的人可以将一行放在两行,然后将所有内容推到第二页。

PHPWord 有没有办法统计页数,所以如果页数超过一页我可以报错?

【问题讨论】:

  • Google: PHPWord count pages 第一个结果:PHPword, get total number of pages。为什么要问一个 1) 之前被问过的问题 2) 有答案 3) 你本可以比创建这个问题更快地发现自己。
  • @icecub 因为问这个问题已经过去了将近一年半。到那时可能已经添加了该选项。也可能有“hacky”的方式来做到这一点。当我在文档中搜索替换模板中图像的方法时,我发现很少,但通过使用 zip 类删除并重新添加我的图像找到了答案。哈基,但它奏效了。所以我问了这个问题,因为我对您发布的链接中给出的答案不满意。
  • 与其做“hacky”的东西,不如从根本上解决你的问题。检查可以安全打印的最大字符数,并且不允许用户输入更多字符。如果在创建文档之前通过表单提交了许多字符,则通过给出错误来在问题发生之前抓住问题。或者,搜索其他解决方案,例如 FPDF
  • 因为名字来自我们的人力资源系统,用户输入在某种意义上已经被禁用了。 PDF 可能是一个选项,但我必须与项目经理核实。
  • 强烈建议切换到 PDF。我知道 Word 可能更受青睐,但这极大地限制了您的选择! Word 使用线条,也许还有表格。 PDF 使用坐标。这意味着您可以为每种类型的数据像素完美分配空间。它会给你带来巨大的灵活性。您也很可能无法确定每个客户都有 Word,因为它不是免费的。 PDF是免费的!所以每个人都可以下载/打印它。而这只是冰山一角。

标签: php phpword


【解决方案1】:

翻过源码后,貌似还做不到。

然而,在 app.xml 中有一个名为“Pages”的标签应该包含页数。我不认为它是准确的,但它至少是一些东西。

这里有一些示例代码:

  // Include PHPWord and other stuff before here
  function getPages() {
    $zip = new \PhpOffice\PhpWord\Shared\ZipArchive();
    $zip->open("/path/to/your/document.docx");
    preg_match("/\<Pages>(.*)\<\/Pages\>/", $zip->getFromName("docProps/app.xml"), $var);
    return $var[0];
  }

这会在一个应该有 2 页的文档上为我返回 1。可能是 PHPWord 不计算页数,或者只计算分页符,但至少这是一个开始。

编辑:使用 Word 命令行,我可以以编程方式更新页数:

\path\to\winword.exe /mToolsWordCountRecount /mFileSave /mFileCloseOrExit myfile.docx

这会增加一两秒,但至少现在我可以准确检测到页数

【讨论】:

    【解决方案2】:

    这是一个替代方案(需要 PhpOffice\PHPWord 库)。

        $zip = new \PhpOffice\PhpWord\Shared\ZipArchive();
        $zip->open('Path/to/Doc/File');
        $xml = new \DOMDocument();
        $xml->loadXML($zip->getFromName("docProps/app.xml"));
    
        /* Echoes number of pages according to app.xml */
        echo $xml->getElementsByTagName('Pages')->item(0)->nodeValue);
    

    【讨论】:

      【解决方案3】:

      这是我如何使用 PHPWord 库检索 Word 2007+ 文档中的页数。 它计算 DOCX 文件中的页数,该文件刚刚经过测试并可以正常工作。

      require_once 'libs/phpword/bootstrap.php';//Path to PHPWord library
      $zip = new \PhpOffice\PhpWord\Shared\ZipArchive();
      $zip->open('docs/my_document_with_several_pages.docx');//relative path to DOCX file
      $xml = new \DOMDocument();
      $xml->loadXML($zip->getFromName("docProps/app.xml"));
      
      // Returns the number of pages according to app.xml
      echo $xml->getElementsByTagName('Pages')->item(0)->nodeValue;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 2016-01-20
        • 2020-01-31
        • 1970-01-01
        • 2014-07-24
        相关资源
        最近更新 更多