我正在使用PHPword
来创建docx
文件。我需要一个方法/函数来获取创建的总页数。
我知道PHPword
确实支持使用$footer->addPreserveText('Page {PAGE} of {NUMPAGES}.');
一旦我获得了总页数,如果文档少于20页,我可以创建额外的页面。
答案 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获取页面信息的数量。