Ручной разрыв страницы в TCPDF - PullRequest
35 голосов
/ 22 октября 2009

Я использую TCPDF для создания PDF в одном из моих проектов. Я просто создаю HTML-файл и передаю его TCPDF для генерации PDF. Но теперь у меня есть HTML-код, в котором несколько сертификатов добавляются один за другим, и я хочу, чтобы в них был разрыв страницы. Разрыв страницы должен определяться HTML, т. Е. Я хочу знать, есть ли в HTML какой-либо идентификатор, который TCPDF понимает, а затем, соответственно, добавляет разрыв страницы в сгенерированный PDF.

Как я мог это сделать?

Ответы [ 8 ]

69 голосов
/ 01 июля 2010

Я использую <br pagebreak="true"/>.

Найти метод writeHTML и код

if ($dom[$key]['tag'] AND isset($dom[$key]['attribute']['pagebreak'])) {
    // check for pagebreak
    if (($dom[$key]['attribute']['pagebreak'] == 'true') OR ($dom[$key]['attribute']['pagebreak'] == 'left') OR ($dom[$key]['attribute']['pagebreak'] == 'right')) {
        // add a page (or trig AcceptPageBreak() for multicolumn mode)
        $this->checkPageBreak($this->PageBreakTrigger + 1);
    }
    if ((($dom[$key]['attribute']['pagebreak'] == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0))))
            OR (($dom[$key]['attribute']['pagebreak'] == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) {
        // add a page (or trig AcceptPageBreak() for multicolumn mode)
        $this->checkPageBreak($this->PageBreakTrigger + 1);
    }
}
17 голосов
/ 07 ноября 2009

Вы можете использовать метод TCPDF AddPage () в сочетании с explode () и подходящим разделителем:

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8',
                 false);

// TCPDF initialization code (...)

$delimiter = '<h1>';
$html      = file_get_contents('./test.html');
$chunks    = explode($delimiter, $html);
$cnt       = count($chunks);

for ($i = 0; $i < $cnt; $i++) {
    $pdf->writeHTML($delimiter . $chunks[$i], true, 0, true, 0);

    if ($i < $cnt - 1) {
        $pdf->AddPage();
    }
}

// Reset pointer to the last page
$pdf->lastPage();

// Close and output PDF document
$pdf->Output('test.pdf', 'I');
10 голосов
/ 30 сентября 2013

Я пытался использовать

<br pagebreak="true" />

или

<tcpdf method="AddPage" />

каждый из них привел не к началу новой страницы вверху страницы, а к добавлению полного пустого пространства на странице A4 между текстом HTML. Таким образом, если текст заканчивался в середине страницы, а затем вставлялся разрыв страницы, новый текст записывался с середины следующей страницы. Что я не хотел.

То, что сработало, было так (найдено здесь TCPDF, заставляющее новую страницу ):

$pdf->writeHTML($content, true, 0, true, 0);

$pdf->AddPage();
$pdf->setPage($pdf->getPage());  

Теперь это начинается с написания текста в верхней части страницы.

7 голосов
/ 30 декабря 2011

С версией 5.9.142 от 2011-12-23 мы можем использовать свойства page-break-before, page-break-inside css, например:

<div style="page-break-inside:avoid;">
some non breakable text
</div>
7 голосов
/ 06 августа 2010

TCPDF поддерживает атрибут 'pagebreak' для тегов HTML и CSS-свойств 'page-break-before' и 'page-break-after'. Например, вы можете использовать <br pagebreak="true" />.

Проверьте официальный http://www.tcpdf.org веб-сайт и форумы для получения дополнительной информации.

2 голосов
/ 10 марта 2016

Согласно http://www.tcpdf.org/examples/example_049.phps вы можете использовать что-то вроде этого

$html .= '<tcpdf method="AddPage" /><h2>Graphic Functions</h2>';

Необходимо проверить, что параметр K_TCPDF_CALLS_IN_HTML в файле конфигурации TCPDF равен true.

0 голосов
/ 14 марта 2017

Если вы присвоите элементу свойство page-break-after, page-break-before или page-break-inside через CSS, к тегу html будет применен атрибут pagebreak или pagebreakafter во время выполнения TCPDF.

// page-break-inside
if (isset($dom[$key]['style']['page-break-inside']) AND ($dom[$key]['style']['page-break-inside'] == 'avoid')) {
    $dom[$key]['attribute']['nobr'] = 'true';
}
// page-break-before
if (isset($dom[$key]['style']['page-break-before'])) {
    if ($dom[$key]['style']['page-break-before'] == 'always') {
        $dom[$key]['attribute']['pagebreak'] = 'true';
    } elseif ($dom[$key]['style']['page-break-before'] == 'left') {
        $dom[$key]['attribute']['pagebreak'] = 'left';
    } elseif ($dom[$key]['style']['page-break-before'] == 'right') {
        $dom[$key]['attribute']['pagebreak'] = 'right';
    }
}
// page-break-after
if (isset($dom[$key]['style']['page-break-after'])) {
    if ($dom[$key]['style']['page-break-after'] == 'always') {
        $dom[$key]['attribute']['pagebreakafter'] = 'true';
    } elseif ($dom[$key]['style']['page-break-after'] == 'left') {
        $dom[$key]['attribute']['pagebreakafter'] = 'left';
    } elseif ($dom[$key]['style']['page-break-after'] == 'right') {
        $dom[$key]['attribute']['pagebreakafter'] = 'right';
    }
}
0 голосов
/ 25 апреля 2010

Вы также можете использовать этот метод для выполнения ваших потребностей:

$htmlcontent1="CERTIFICATE NUMBER 1 IMAGE HERE";

// output the HTML content
$pdf->writeHTML($htmlcontent1, true, 0, true, 0);

// reset pointer to the last page
$pdf->lastPage();

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Print a table

// add a page
$pdf->AddPage();

$htmlcontent1="CERTIFICATE NUMBER 1 IMAGE HERE";

// output the HTML content
$pdf->writeHTML($htmlcontent1, true, 0, true, 0);
// reset pointer to the last page
$pdf->lastPage();

// ---------------------------------------------------------

//Close and output PDF document
$pdf->Output('textcertificate.pdf', 'D');

Надеется, это кому-нибудь поможет:)

Спасибо

...