我使用PHPWord的模板解析器创建文档,然后使用命令行自动打印文档。文档必须在单页上,因为它是证书,并且要在特殊纸张上打印。
我正在添加人名,这样名字长的人就可以把一行加到两行上,然后把所有东西都推到第二页上。
PHPWord有没有办法计算页数,这样如果页数超过1,我就会抛出错误?
发布于 2016-10-25 06:00:14
在翻看源代码之后,看起来还不能这么做。
然而,在app.xml中有一个叫做" pages“的标记,应该包含页数。我不认为它是准确的,但它至少是某种程度的。
下面是一些示例代码:
// 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];
}对于一个应该有2页的文档,这将为我返回1。PHPWord可以不计算页数,也可以只计算分页符,但至少这是一个开始。
编辑:使用Word命令行,我可以通过编程更新页数:
\path\to\winword.exe /mToolsWordCountRecount /mFileSave /mFileCloseOrExit myfile.docx
这会将生成时间增加一两秒,但至少现在我可以准确地检测页数
发布于 2018-06-24 18:42:59
这是一种替代方法(需要PhpOffice\PHPWord库)。
$zip = new \PhpOffice\PhpWord\Shared\ZipArchive();
$zip->open('Path/to/Doc/File');
$xml = new \DOMDocument();
$xml->loadXML($zip->getFromName("docProps/app.xml"));
/* Echoes number of pages according to app.xml */
echo $xml->getElementsByTagName('Pages')->item(0)->nodeValue);发布于 2020-07-22 04:17:50
下面是我如何使用PHPWord库检索Word 2007+文档中的页数。它统计DOCX文件中刚刚测试并正常工作的页数。
require_once 'libs/phpword/bootstrap.php';//Path to PHPWord library
$zip = new \PhpOffice\PhpWord\Shared\ZipArchive();
$zip->open('docs/my_document_with_several_pages.docx');//relative path to DOCX file
$xml = new \DOMDocument();
$xml->loadXML($zip->getFromName("docProps/app.xml"));
// Returns the number of pages according to app.xml
echo $xml->getElementsByTagName('Pages')->item(0)->nodeValue;https://stackoverflow.com/questions/40210468
复制相似问题