2009-10-22 2 views
33

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

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

ответ

60

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

метод Find 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); 
    } 
} 
+6

Блестящий - отличная работа - отличный улов в коде! – JasonMichael

+0

это была спасательная жизнь Амди, это действительно сэкономило много времени – atif

+0

Работало и для меня! Спасибо –

15

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

$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'); 
+0

Это работает как шарм marc .......... отлично :-) – Fero

0

Вы можете также следовать этому методу, чтобы выполнить ваши потребности:

$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'); 

Надеет, что это помогает кому-то :)

Thanks

7

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

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

5

С версии 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

Я попытался с помощью

<br pagebreak="true" /> 

или

<tcpdf method="AddPage" /> 

, каждый из них привел к тому, что не начиналась новая страница в верхней части страницы, а добавлялась полная пробел на A4-странице между HTML-текстом. Поэтому, если текст закончился в середине страницы, а затем был взломан разрыв страницы, новый текст был написан с середины следующей страницы. Который я не хотел.

То, что сработало было это (нашел его здесь TCPDF forcing a new page):

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

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

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

1

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

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

Вы должны проверить, что параметр K_TCPDF_CALLS_IN_HTML в конфигурационном файле TCPDF верно.

-1

Используйте для разбора страницы в содержимом html.

+0

Добавьте некоторое объяснение с ответом, как этот ответ помогает OP в устранении текущей проблемы –

0

Давать ЭЛЕМЕНТ page-break-after, page-break-before или page-break-inside свойство с помощью CSS будет применяться атрибут pagebreak или pagebreakafter в теге HTML во время выполнения 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'; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^