2015-03-13 3 views
1

Я пытаюсь создать PDF с несколькими наборами нумераций страниц и с ненумерованными страницами. Я не буду заранее говорить, как долго каждый набор страниц будет динамически генерироваться. Например, PDF может содержать 10 полных страниц, где страницы 1-4 имеют «Страница X of 4» в нижнем колонтитуле, стр. 5 ненумеровано, страницы 6-8 имеют «Страница X из 3», а страницы 9-10 являются ненумерованными ,dompdf page_script() variables

Прямо сейчас у меня есть нумерации страниц с использованием функций page_script() и text(). По сути, я думаю, что мне нужно, это способ передать переменную из документа в функцию page_script() по мере создания PDF-файла. Это позволило бы мне добавить что-то вроде <?php $page_count = false; ?> или <?php $page_count_reset = true; ?> в разных местах документа и действовать соответственно в функции page_script(). Насколько я могу судить, это не представляется возможным.

Я могу установить глобальные значения в документе <?php $GLOBALS['page_count'] = false; ?> и прочитать их изнутри page_script(), но все они обрабатываются сразу. Таким образом, все, что я установил в документе $ GLOBALS ['page_count'] в документе, - это то, что $ GLOBALS ['page_count'] находится во всей функции page_script().

Я надеюсь, что это имеет какой-то смысл. Мой следующий шаг - создать несколько PDF-файлов и объединить их вместе, но это то, что я не хочу делать, если только не придется. Кто-нибудь думает?

ответ

1

Вы на правильном пути. Практически там. Что вам нужно сделать, так это отслеживать разделы в глобальной переменной. Следующие фрагменты могут быть помещены в ваш HTML для использования с dompdf 0.6.1.

1) Установите несколько глобальных переменных Первое, что в организме:

$GLOBALS['start_pages'] = array(); 
$GLOBALS['current_start_page'] = null; 
$GLOBALS['show_page_numbers'] = false; 

2) В начале каждого раздела заполнить start_pages глобальный:

$GLOBALS['current_start_page'] = $pdf->get_page_number(); 
$GLOBALS['start_pages'][$pdf->get_page_number()] = array(
    'show_page_numbers' => true, 
    'page_count' => 1 
); 

3) В конце каждой секции регистрировать количество страниц:

$GLOBALS['start_pages'][$GLOBALS['current_start_page']]['page_count'] = $pdf->get_page_number() - $GLOBALS['current_start_page'] + 1; 

4) Используйте скрипт страницы, чтобы выписать свой нумерация страниц для каждого раздела:

$pdf->page_script(' 
    if ($pdf) { 
    if (array_key_exists($PAGE_NUM, $GLOBALS["start_pages"])) { 
     $GLOBALS["current_start_page"] = $PAGE_NUM; 
     $GLOBALS["show_page_numbers"] = $GLOBALS["start_pages"][$GLOBALS["current_start_page"]]["show_page_numbers"]; 
    } 
    if ($GLOBALS["show_page_numbers"]) { 
     $font = Font_Metrics::get_font("helvetica", "bold"); 
     $pdf->text(10, 10, "Page " . ($PAGE_NUM - $GLOBALS["current_start_page"] + 1) . " of " . $GLOBALS["start_pages"][$GLOBALS["current_start_page"]]["page_count"], $font, 12); 
    } 
    } 
'); 

Окончательный документ будет выглядеть примерно так:

<html> 
<body> 

<script type="text/php"> 
    // setup 
    $GLOBALS['start_pages'] = array(); 
    $GLOBALS['current_start_page'] = null; 
    $GLOBALS['show_page_numbers'] = false; 
</script> 

<script type="text/php"> 
    // section start 
    $GLOBALS['current_start_page'] = $pdf->get_page_number(); 
    $GLOBALS['start_pages'][$pdf->get_page_number()] = array(
    'show_page_numbers' => true, 
    'page_count' => 1 
); 
</script> 

<p>lorem ipsum ... <!-- lots of text --> 

<script type="text/php"> 
    // record total number of pages for the section 
    $GLOBALS['start_pages'][$GLOBALS['current_start_page']]['page_count'] = $pdf->get_page_number() - $GLOBALS['current_start_page'] + 1; 
</script> 
<div style="page-break-before: always;"></div> 
<script type="text/php"> 
    // section start 
    $GLOBALS['current_start_page'] = $pdf->get_page_number(); 
    $GLOBALS['start_pages'][$pdf->get_page_number()] = array(
    'show_page_numbers' => false, 
    'page_count' => 1 
); 
</script> 

<p>lorem ipsum ... <!-- lots of text --> 

<script type="text/php"> 
    // record total number of pages for the section 
    $GLOBALS['start_pages'][$GLOBALS['current_start_page']]['page_count'] = $pdf->get_page_number() - $GLOBALS['current_start_page'] + 1; 
</script> 

<script type="text/php"> 
    $pdf->page_script(' 
     if ($pdf) { 
     if (array_key_exists($PAGE_NUM, $GLOBALS["start_pages"])) { 
      $GLOBALS["current_start_page"] = $PAGE_NUM; 
      $GLOBALS["show_page_numbers"] = $GLOBALS["start_pages"][$GLOBALS["current_start_page"]]["show_page_numbers"]; 
     } 
     if ($GLOBALS["show_page_numbers"]) { 
      $font = Font_Metrics::get_font("helvetica", "bold"); 
      $pdf->text(10, 10, "Page " . ($PAGE_NUM - $GLOBALS["current_start_page"] + 1) . " of " . $GLOBALS["start_pages"][$GLOBALS["current_start_page"]]["page_count"], $font, 12); 
     } 
     } 
    '); 
</script> 

</body> 
</html> 

Вы можете увидеть образец этого на практике здесь: http://eclecticgeek.com/dompdf/debug.php?identifier=e980df4efacf5202c2f1d31579f09c56

+0

Thanks Brain! Это то, что мне нужно! Возможно, это не подходит для этого вопроса, но почему $ pdf доступен только в '', а не ''? – jcon

+0

Вы можете получить к нему доступ с обычного PHP, попробуйте '$ dompdf-> get_canvas()'. Основное ограничение прямо сейчас заключается в том, что холст доступен только после того, как документ был визуализирован. Поэтому полезны только переменные 'page_script' и' page_text'. – BrianS

+0

@BrianS вы спасатель, не уверен, что это какая-то идиосинкразия в моем собственном скрипте, но я обнаружил, что по какой-то причине внутри блока 'page_script'' $ PAGE_NUM' работает для меня, но '$ pdf-> get_page_number () 'всегда возвращает количество страниц. –