Как получить номер страницы в dompdf PDF при использовании " view"

Ok, поэтому я использую следующий фрагмент, чтобы получить "представления" HTML с переменными PHP, загруженными в as $data Так что я могу сделать такие вещи как заполнить в tr ' s данных из вызова базы данных или что-то еще.

function getView ($file, $data=NULL) {
    if (!empty($data)) extract($data);
    ob_start();
    if (is_file($file)) include($file);
    return ob_get_clean();
}

используется для чего-то вроде, $htmlPDF = getView('receipt.php', array( 'orderNumber' => $orderNumber )); здесь $orderNumber затем используется в HTML для заполнения правильных мест. Например что-то вроде:

<h1>You Order #<?= $orderNumber; ?></h1>


Хорошо, суть в том, что именно так я получаю свой HTML. Затем я загружаю его в переменную dompdf как:
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();

что все отлично работает. Проблема становится inline php скрипт для работы, чтобы получить номера страниц / верхние / нижние колонтитулы страниц. Я следовал указаниям здесь лучшее, что я могу, но я не могу сделать правильную смесь. До сих пор не имея никаких ошибок, кроме как я получаю 0 номера страниц в любом месте!

и да я смотрел на страницы, как заголовок страницы PDF с использованием DOMPDF в PHP и dompdf номер страницы, но все же никакого прогресса! Мне интересно, если inline php сценарии связаны с тем, как я получаю HTML в виде строки? Какие-нибудь указания, идеи, советы?

3 ответов


обновление о изменения С версии dompdf>= 0.7.0
1. Потому что dompdf_config.Инк.php файл был удален из этого выпуска (и больше не ссылается) все параметры dompdf должны быть установлены во время выполнения.
4. Класс FontMetrics теперь создается вместо статического. Для упрощения миграции embedded скрипты из более ранних версий dompdf мы предоставляем доступ к экземпляру класса FontMetrics через переменную $fontMetrics. Обновите встроенные скрипты. Например, FontMetrics:: get_font('helvetica') теперь будет $fontMetrics->getFont('helvetica').
~ спасибо Дэннис Амелинг ' s ответ для обновленной информации.

нашел мой ответ, просмотрев . Как оказалось,DOMPDF_ENABLE_PHP установлено false таким образом, вызывая встроенный скрипт php игнорируется. Я просто отредактировал dompdf_config.custom.inc.php к следующему, и все в порядке и работает с более поздним кодом в view.

в dompdf / dompdf_config.традиция.Инк.в PHP

<?php
    define("DOMPDF_ENABLE_PHP", true);

Во Время

$dompdf->set_option("isPhpEnabled", true);

затем, в моем html-файле

<body>
    <script type="text/php">
        if ( isset($pdf) ) {
            // OLD 
            // $font = Font_Metrics::get_font("helvetica", "bold");
            // $pdf->page_text(72, 18, "{PAGE_NUM} of {PAGE_COUNT}", $font, 6, array(255,0,0));
            // v.0.7.0 and greater
            $x = 72;
            $y = 18;
            $text = "{PAGE_NUM} of {PAGE_COUNT}";
            $font = $fontMetrics->get_font("helvetica", "bold");
            $size = 6;
            $color = array(255,0,0);
            $word_space = 0.0;  //  default
            $char_space = 0.0;  //  default
            $angle = 0.0;   //  default
            $pdf->page_text($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle);
        }
    </script>
    <div

если вы идете по этому маршруту, не забудьте перезапустить Apache


если вы используете DOMPDF >= 0.7.0, dompdf_config.Инк.файл php удалены и добавление номера страницы теперь требует немного другого подхода:

потому что dompdf_config.Инк.php файл был удален из этого выпуска (и больше не ссылается) все параметры dompdf должны быть установлены во время выполнения.

чтобы разрешить выполнение PHP-кода DOMPDF, используйте:

$dompdf->set_option("isPhpEnabled", true);

Кроме Того, FontMetrics теперь должно быть называется С помощью $fontMetrics вместо Font_Metrics, поэтому код, упомянутый @user1231342435346354, немного меняется:

<script type="text/php">
if ( isset($pdf) ) { 
    $pdf->page_script('
        if ($PAGE_COUNT > 1) {
            $font = $fontMetrics->get_font("Arial, Helvetica, sans-serif", "normal");
            $size = 12;
            $pageText = "Page " . $PAGE_NUM . " of " . $PAGE_COUNT;
            $y = 15;
            $x = 520;
            $pdf->text($x, $y, $pageText, $font, $size);
        } 
    ');
}
</script>

сначала вы должны включить выполнение встроенных скриптов php в . (изменить define("DOMPDF_ENABLE_PHP", true); эта строка в значение true)

этот код устанавливает индикатор страницы в правом углу заголовка...

    <script type="text/php">
    if ( isset($pdf) ) { 
        $pdf->page_script('
            if ($PAGE_COUNT > 1) {
                $font = Font_Metrics::get_font("Arial, Helvetica, sans-serif", "normal");
                $size = 12;
                $pageText = Page . " " . $PAGE_NUM . " of " . $PAGE_COUNT;
                $y = 15;
                $x = 520;
                $pdf->text($x, $y, $pageText, $font, $size);
            } 
        ');
    }
</script> 

убедитесь,что тег скрипта находится в теге body... иначе не получится!