我PHPword
用来创建一个docx
文件。我需要一个可以获取创建的页面总数的方法/函数。
我知道PHPword
确实支持页面编号,这很容易使用$footer->addPreserveText('Page {PAGE} of {NUMPAGES}.');
一旦我得到总页数,如果文档少于 20 页,我可以创建额外的页面。
我PHPword
用来创建一个docx
文件。我需要一个可以获取创建的页面总数的方法/函数。
我知道PHPword
确实支持页面编号,这很容易使用$footer->addPreserveText('Page {PAGE} of {NUMPAGES}.');
一旦我得到总页数,如果文档少于 20 页,我可以创建额外的页面。
我也问过这个问题。虽然本身没有内置,但您可以通过手动打开 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
以正确计算文档中的页数。
{PAGE} 和 {NUMPAGES} 是由 Word 而不是 phpword 处理的特定单词域代码,即 phpword 实际上并不知道页码值,它只是将这些域代码原样传递到生成的 word 文档中。
作为对原始问题的回答,我认为您无法从 phpword 获取页数信息。