Как получить количество страниц в документе mPDF?

Кто-нибудь знает, как получить количество сгенерированных страниц, если документ PDF с использованием библиотеки mPDF?


person Nikita Gopkalo    schedule 23.04.2012    source источник
comment
stackoverflow.com/questions/1098156 / - может вам поможет   -  person Rikesh    schedule 23.04.2012
comment
добавьте это в основной класс mPDF: function getPageCount() { return count($this-›pages); } затем добавьте в html-парсер такую ​​строку: $html = str_replace('{PAGECNT}', $this-›getPageCount(), $html); после этих действий вы можете вставить {PAGECNT} прямо в ваш проанализированный HTML, чтобы получить результат. Это полезно, если вам нужно указать страницу, например: страница 2 из 5.   -  person Nikita Gopkalo    schedule 23.04.2012


Ответы (6)


Я искал ту же функциональность при использовании EYiiPdf (оболочка для mPDF на Yii), и следующее работало как шарм:

$mPDF->setFooter('{PAGENO} / {nb}');

Я проверил источник mPDF и нашел его по адресу mpdf.php:1656 (версия 5.4):

function AliasNbPages($alias='{nb}') {
    //Define an alias for total number of pages
    $this->aliasNbPg=$alias;
}

Надеюсь, поможет!

person Tomi Drpic    schedule 20.02.2013
comment
На самом деле принятый ответ не работает для меня !! И ваше решение сработало :) - person sravis; 13.06.2013
comment
Я создаю pdf-файлы с помощью mpdf (внутри Yii), pdf-файлы создаются из html-файлов, и я использовал setfooter для нижнего колонтитула, но он отображается только на последней странице! как получить это на каждой странице? $mPDF1-›setFooter('{DATE j-m-Y}|{PAGENO}/{nb}','O|E'); - person arun; 07.03.2014

Вы можете использовать {nbpg}, например

<div align="center"><b>{PAGENO} / {nbpg}</b></div>
person Zvonimir Burić    schedule 21.10.2013
comment
Это очень полезный ответ. Если вы используете resetpagenum, {nbpg} показывает текущий номер страницы, начиная с вашего последнего сброса. Если вы хотите показать общее количество страниц, вы можете использовать {nb}. - person Mandy Schoep; 12.06.2014

Если вы пытаетесь вернуть количество страниц, чтобы вы могли сохранить это в базе данных или какой-либо другой операции за пределами mpdf, это легко сделать таким образом.

После того, как вы напишете свой контент:

$mpdf->WriteHTML($html);
$page_count = $mpdf -> page;

$mpdf->Output();
person John F    schedule 28.02.2014
comment
Я искал это для AGES, часами просматривал документы и наконец нашел ответ. Большое спасибо! - person Aleksandar Bencun; 07.08.2016
comment
Больше нигде такого не нашел! Спасибо! - person axelra82; 28.05.2018

добавьте это в основной класс mPDF:

function getPageCount() {
    return count($this->pages);
}

затем добавьте в html-парсер такую ​​строку:

$html = str_replace('{PAGECNT}', $this->getPageCount(), $html);

после этих действий вы можете вставить {PAGECNT} прямо в ваш проанализированный HTML, чтобы получить результат. Это полезно, если вам нужно указать страницу:

person Nikita Gopkalo    schedule 26.04.2012
comment
Это работает для меня, но отображается только на последней странице, можно ли показывать в нижнем колонтитуле каждой страницы? - person Vince Pettit; 30.07.2013
comment
подскажите пожалуйста куда нужно вставить парс html? в какой функции? - person Igor Kalamurda; 31.03.2016
comment
@VincePettit .. как создать индекс на основе html в mpdf - person Madhu Nair; 29.05.2018

  • замена псевдонимов {nb} и {nbpg} для общего числа
  • {PAGENO} для номера текущей страницы

ОБНОВЛЕНИЕ

Обратите внимание, что этот ответ относится к библиотеке mdf v4, которая была текущей версией на момент написания.

Минимальный рабочий пример от @aiao

<?php 
$pagenumber= '<!--mpdf Page {PAGENO} of {nbpg}mpdf--> $mpdf->WriteHTML($pagenumber); 
$mpdf->Output();
?> 

<?php 
$pagenumber= '<!--mpdf Page {PAGENO} of {nbpg}mpdf--> $mpdf->WriteHTML($pagenumber); 
$mpdf->Output();
?>
person sr9yar    schedule 24.06.2014
comment
Пожалуйста, объясните, как это следует использовать. Как они возвращают количество страниц в приложение? - person Nico Haase; 07.11.2019
comment
Несмотря на то, что я могу ответить на ваш вопрос, вопрос ОП не имеет ничего общего с возвратом количества страниц в приложение. Это псевдонимы замены, они помещаются в ваш html-шаблон и анализируются экземпляром класса mdf. Это ответ для библиотеки v4, если я правильно помню, смотрите год. Документация по этой библиотеке отсутствовала (возможно, все еще существует), что затрудняло поиск правильных имен заполнителей сразу. - person sr9yar; 07.11.2019
comment
Пожалуйста, укажите MWE (минимальный рабочий пример). Вам не нужно его тестировать, хотя было бы неплохо... создать экземпляр объекта, использовать параметр ..etc ‹?php $pagenumber= '‹!--mpdf Страница {PAGENO} из {nbpg}mpdf- -> $mpdf->WriteHTML($pagenumber); $mpdf-›Вывод();?› - person aiao; 07.11.2019
comment
@aiao На самом деле, не стесняйтесь редактировать мой ответ. Я написал этот ответ, потому что мне пришлось потратить некоторое время на поиск этих заполнителей (на самом деле я не знал, что они существуют с самого начала). ИМХО, если ОП дошел до того, что задал этот вопрос, он довольно хорошо знает, как инициализировать библиотеку и создать базовый pdf из html. Последняя версия, с которой я работал, была 6, возможно, сейчас есть более новая версия. Я не думаю, что мы должны тратить так много времени на улучшение этого ответа. - person sr9yar; 07.11.2019

Следите за строкой:

preg_replace('/\{DATE\s+(.*?)\}/e',"date('\\1')",$hd);

в функции mpdf.php Footer() Это может привести к тому, что ваш "{PAGENO} / {nb}" не будет отображаться. Просто закомментируйте его или используйте strpos('{DATE' > -1), чтобы проверить, доступен ли он. Также вам может понадобиться добавить:

$mpdf->ignore_invalid_utf8 = true;

а также, если вам не нужна строка нижнего колонтитула:

$mpdf->defaultfooterline = false;

После этих изменений у меня наконец-то заработала нумерация страниц.

person Goce Dimkovski    schedule 06.04.2016