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