PHPword,获取总页数

时间:2015-05-09 19:07:20

标签: phpword

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

我知道PHPword确实支持使用$footer->addPreserveText('Page {PAGE} of {NUMPAGES}.');

轻松完成的网页编号

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

2 个答案:

答案 0 :(得分: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() winword.exe使用/m开关运行ToolsWordCountRecount宏来解决这个问题。所以像这样:

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

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

答案 1 :(得分:0)

{PAGE}和{NUMPAGES}是由Word而不是phpword处理的特定字段字段代码,即phpword实际上并不知道页码值,它只是将这些字段代码传递给结果字文档。

作为对原始问题的回答,我认为您不能从phpword获取页面信息的数量。

more information about the word field values