TCPdf добавить собственного автора или страницу в нижний колонтитул на нескольких страницах (автор / страница может отличаться на каждой странице) - PullRequest
0 голосов
/ 21 ноября 2018

Я нашел много информации о номерах страниц в нижнем колонтитуле для TCpdf, но я не нашел решения моей конкретной проблемы.

Моя проблема: пользователь может добавить тип контента с помощью: изображения, номера страницы, заголовка и ориентации.Номер страницы необходим, потому что контент создается при получении изображения.Так что это не в хронологическом порядке.Изображение может быть добавлено для страницы 20, а позже отправляется изображение, которое должно быть на странице 2.Поэтому в качестве решения я добавил возможность добавить номер страницы в качестве поля в типе контента.

при создании типа содержимого снова создается полный pdf.Но как я могу установить страницу для вставленной страницы?

У меня было решение отключить нижний колонтитул и добавить собственную строку при добавлении страницы.Но при попытке создать оглавление он берет номер последней страницы и продолжает повторять последний номер.pagetitle1 ..................... 40 pagetitle2 ..................... 40 ...

мой код, когда создается каждая страница (где я думал, что могу добавить setPage ($ number)), но это выдает ошибку: Неверный номер страницы в функции setPage ()

  foreach ($nodes as $node) {
 $title = $node->title;
 $image = $node->field_tune['und'][0];
 $image_orientation = $node->field_orientatie['und'][0]['value'];
 $author = $node->field_composer['und'][0]['value'];
 $page = $node->field_page['und'][0]['value'];
   $orientation = ($image_orientation === 'Landscape' ) ? 'L' : 'P';

 // add a page
 $pdf->AddPage($orientation, 'A4', FALSE, TRUE);

 //Here I added the code to set page number
 //$pdf->setPage($page); --> this gave the error. 
  //But after further checking, this wasn't something to set 
  //pagenumber, but to go back to the defined page. 

 $pdf->Bookmark($title, 0, 0, '', 'B', array(0,64,128));


 $html = theme('html_content_type_theme', [
   'image' => theme('image_style', [
     'style_name' => 'styled_image',
     'path' => $image_uri,
   ]),
   'orientation' => $orientation,
   'title' => $title,
   'author' => $author,
 ]);

 // output the HTML content
 $pdf->writeHTML($html, TRUE, TRUE, TRUE, FALSE, '');
 $pdf->SetY(-15);
 $pdf->SetFont('helvetica', '', 10);
 //Here I create my custom footer to see the correct page
 $pdf->Cell(0, 10, 'Ypres surrey Pipes & drums', 0, FALSE, 'C', 0, '', 0, FALSE, 'T', 'C');
 $pdf->Cell(0, 10, $page, 0, FALSE, 'T', 0, '', 0, FALSE, 'T', 'C');

}

Другой вопрос: каждый контент может быть создан автором.Как я могу добавить имя автора в нижний колонтитул?(Решение сейчас: добавить автора также в виде пользовательской строки в html, а не в нижний колонтитул)

1 Ответ

0 голосов
/ 22 ноября 2018

Я нашел решение передать пользовательский номер в нижний колонтитул.Это также будет решением для моей проблемы заголовка, где я хочу добавить автора.

class MYPDF extends TCPDF {

     public $pageNumber = '1';

     /**
      * @return string
      */
     public function getPageNumber(): string {
       return $this->pageNumber;
     }

     /**
      * @param string $pageNumber
      *
      * @return MYPDF
      */
     public function setPageNumber(string $pageNumber): MYPDF {
       $this->pageNumber = $pageNumber;
       return $this;
     }

    public function Footer() {
        $this->SetY(-15);
        $this->SetFont('helvetica', 'I', 8);
        $this->Cell(0, 10, $this->pageNumber, 0, false, 'R', 0, '', 0, false, 'T', 'M');
     }
  }

В моем foreach ($ node ...) я добавил $ pdf-> setPageNumber ($ page). Это должно быть после addPage.Потому что иначе, нижний колонтитул получит номер предыдущего узла.

$pdf->AddPage($orientation, 'A4', FALSE, TRUE);
$pdf->setPageNumber($page);

это можно сделать для всех пользовательских изменений, которые вы хотите внести в верхний или нижний колонтитул

...