【问题标题】:PHPword, get total number of pagesPHPword,获取总页数
【发布时间】:2015-05-09 19:07:20
【问题描述】:

我正在使用PHPword 创建一个docx 文件。我需要一个可以获取创建的页面总数的方法/函数。

我知道PHPword 确实支持使用$footer->addPreserveText('Page {PAGE} of {NUMPAGES}.'); 轻松完成的页面编号

获得总页数后,如果文档的页数少于 20 页,我可以创建额外的页面。

【问题讨论】:

    标签: phpword


    【解决方案1】:

    我也问过这个问题。虽然本身没有内置,但您可以通过手动打开 ZIP 文件并查看其中的 app.xml 文件来获取信息

    在此处查看我的答案和代码示例:https://stackoverflow.com/a/40228208/6247265

    下面是相关代码:

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

    有一个问题:页码是错误的。我通过exec()ing 到winword.exe 解决了这个问题,使用/m 开关运行ToolsWordCountRecount 宏。所以是这样的:

    c:\path\to\winword.exe /mToolsWordCountRecount /mFileSave /mFileCloseOrExit yourfile.docx

    这会强制 Word 重新计算页数,保存文档然后退出。然后你可以运行getPages 来正确计算文档的页数。

    【讨论】:

    • 如果这个问题是重复的,那么您应该将其标记为重复,而不是发布以链接为主的答案。请注意,可以将较旧的问题复制到较新的问题中,而较新的问题有答案。
    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • @EJoshuaS 你是对的。我认为这是一个带有编辑历史的 SO 问题,这很好。我已经用代码和关于强制 Word 重新计算页面的额外花絮更新了我的答案
    【解决方案2】:

    {PAGE} 和 {NUMPAGES} 是由 Word 而不是 phpword 处理的特定词域代码,即 phpword 实际上并不知道页码值,它只是将这些域代码原样传递到结果词中文件。

    作为对原始问题的回答,我认为您无法从phpword中获取页数信息。

    more information about the word field values

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-04
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多