Mustafa Mansoor
Mustafa Mansoor

Reputation: 177

html2pdf page-break-after creating issue

I want to create new page using css property "page-break-after". I have followed all steps given on Page break in Html2Pdf but getting following error.

enter image description here enter image description here

As you can see... 2nd page is starting from where first page ended.. I want 2nd page to start from top.

<?
/*
Template Name: View Form
*/

include_once(ABSPATH."connection/localhost.php");
include_once(ABSPATH."include/cls_forms.php");
include_once(ABSPATH."include/cls_fields.php");
//Authenticate("U");

$oFields = new Fields;
$oForm = new Forms;

$Title = $oForm->getFormTitleByID($_GET['form_id']);
$Content = $oForm->getFormContentByID($_GET['form_id']);
$isPleading = $oForm->getFormTypeByID($_GET['form_id']);


$FieldValues = $oForm->getUserFormFields($_SESSION['user_id'], $_GET['distinct_id']);

foreach($FieldValues as $Name => $Value)
{
    $Content = str_replace("«".$Name."»", "<b>".$Value."</b>", $Content);
}

function filterMsWord($Content)
{
    $Content = preg_replace("<([A-Za-z0-9\/]*):([A-Za-z0-9-\"=: ]*)>", "", $Content);
    $Content = str_replace("<>", "", $Content);
    return $Content;
}

if ($_GET['type'] == 'doc')
    $Content = str_replace("[---pagebreak---]", '<br clear=all style="mso-special-character:line-break; page-break-before:always">', $Content);
elseif ($_GET['type'] == 'pdf')
    $Content = str_replace("[---pagebreak---]", "<div class='page-break-before'></div><div class='page-break'></div>", $Content);
else
    $Content = str_replace("[---pagebreak---]", "<div class='page-break'></div>", $Content);

if ($_GET['type'] == 'doc')
{
    header("Content-type: application/vnd.ms-word");
    header("Content-Disposition: attachment;Filename=".$Title.".doc");
}
else if ($_GET['type'] == 'pdf')
{
    require_once(ABSPATH.'pdf/html2pdf.class.php');
    ob_start();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Preview Form</title>
<style>
.pleading-paper-size {
    width: 6.35in !important;
    max-width: 8.5in !important;
    <? if ($_GET['type'] != 'pdf' and $_GET['type'] != 'doc') {?>  
        background-image: url(../images/pleading.jpg);
        background-position: -0.5in 0;
        background-repeat: repeat-y;
    <? } ?>
    padding-left: 1in !important;
    padding-right: 1in !important;
    <? if ($_GET['type'] != 'pdf') { ?>  
    line-height: 0.3242in !important;
    <? } ?>  
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
}
.normal {
    width: <? if (!isset($_GET['type'])) { ?>6.0<? } else if ($_GET['type'] == 'doc') { ?>6.5<? } else { ?>5.0<? } ?>in !important;
    text-align: left;
}
.page-break {
    page-break-after: always;
    page-break-inside: avoid;
    clear:both;
}
page-break-before {
    page-break-before: always;
    page-break-inside: avoid;
    clear:both;
}
p, td {
    margin: 0 !important;
    text-indent: 0 !important;
    padding: 0 !important;
    height: auto !important;
}
@media print {
.pleading-paper-size {
    background-image: none;
}
}
</style>
<? if (isset($_GET['preview'])) { ?>
<script language="javascript">
    function clearData(){
        window.clipboardData.setData('text','') 
    }
    function cldata(){
        if(clipboardData){
            clipboardData.clearData();
        }
    }
    setInterval("cldata();", 1000);
</script>
<? $Body = ' ondragstart="return false;" onselectstart="return false;"  oncontextmenu="return false;" onload="clearData();" onblur="clearData();" style="background-image: url('.ABSPATH.'images/PREVIEW.png);"';
} ?>
</head>

<body <?=$Body?>>
<? if (isset($_GET['preview'])) { ?>
  <table class="<? if ($isPleading) { ?>pleading-paper-size<? } else { ?>normal<? } ?>" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><a href="javascript:void()" onclick="javascript: window.history.back()">
        <input name="continue" type="button" value="Go Back" style="font-size:24px" />
        </a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="../addons/?distinct_id=<?=$_GET['distinct_id']?>">
        <input name="continue" type="button" value="Continue to Next Step" style="font-size:24px" />
        </a></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    </tr>
  </table>
<? } ?>
<div class="<? if ($isPleading) { ?>pleading-paper-size<? } else { ?>normal<? } ?>">
<?=filterMsWord($Content)?>
</div>
<? if (isset($_GET['preview'])) { ?>
  <table class="<? if ($isPleading) { ?>pleading-paper-size<? } else { ?>normal<? } ?>" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><a href="javascript:void()" onclick="javascript: window.history.back()">
        <input name="continue" type="button" value="Go Back" style="font-size:24px" />
        </a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="../addons/?distinct_id=<?=$_GET['distinct_id']?>">
        <input name="continue" type="button" value="Continue to Next Step" style="font-size:24px" />
        </a></td>
    </tr>
  </table>
  <? } ?>
</body>
</html>
<?
if ($_GET['type'] == 'pdf')
{
    try
    {
        $html = ob_get_contents();
        ob_end_clean();

        $html2pdf = new HTML2PDF('P', 'A4', 'en');
        $html2pdf->pdf->SetDisplayMode('fullpage');
        $html2pdf->writeHTML($html, isset($_GET['vuehtml']));
        $html2pdf->Output($Title.'.pdf', 'D');
    }
    catch(HTML2PDF_exception $e) {
        echo $e;
        exit;
    }
}
?>

Upvotes: 1

Views: 18100

Answers (5)

Vishnu
Vishnu

Reputation: 108

consider pagebreak: { mode: 'avoid-all'}, below is the sample option

 var opt = {
        margin: 1, //top, left, buttom, right
        filename: 'Initial_Contract.pdf',
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: {scale:2 },
        jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' },
        pagebreak: { mode: 'avoid-all', after: '.avoidThisRow' }

    };

Upvotes: 0

Łukasz Jakubiec
Łukasz Jakubiec

Reputation: 11

If you still want to use

<div style="page-break-after: always;"></div>

instead of

<page>

you should also add $this->parsingCss->setPosition(); in _tag_close_DIV method:

protected function _tag_close_DIV($param, $other='div')
    {
        if($this->parsingCss->value['page-break-after'] == "always") {
            $this->_setNewPage(null, '', null, $this->_defaultTop);
            $this->parsingCss->setPosition();
        }

Upvotes: 1

user3045072
user3045072

Reputation: 654

Use page tags.

ex.

<page>
 content here.
</page>

Upvotes: 5

John Perge
John Perge

Reputation: 11

IN html2fpdf.php

search this:

switch($tag){
  case 'PAGE_BREAK': //custom-tag
  case 'NEWPAGE': //custom-tag
      $this->blockjustfinished = true;
      $this->AddPage();
      break;

You see you can use <NEWPAGE> tag which define new page or page break

I use "<NEWPAGE>" it works correctly.

I use 'HTML2FPDF_VERSION','3.0(beta)'

Upvotes: 1

Jimbo
Jimbo

Reputation: 497

I'm having the same problem, and have tried using page-break-before as well as page-break-after, both using the DIV tag. It appears that HTML2pdf class is not resetting the vertical start point of the next line of text, after the page break occurs.

Sample code:

(code for first page here)

// Supplement Schedule invoice page
$htmlfile[] = "<div style=\"page-break-before:always\"></div>";
$htmlfile[] = "<h1 style=\"text-align:center; margin-bottom:0; \">Supplement Estimate</h1>";
$htmlfile[] = "<h4 style=\"text-align:center; margin:0\">($visit->next_visit Weeks)</h4>";
[more code]

Sample code using page tag to insert page break:

(code for first page here)

// Supplement Schedule invoice page
$htmlfile[] = "<page>";
$htmlfile[] = "<h1 style=\"text-align:center; margin-bottom:0; \">Supplement Estimate</h1>";
$htmlfile[] = "<h4 style=\"text-align:center; margin:0\">($visit->next_visit Weeks)</h4>";
[more code/text on the page]
$htmlfile[] = "</page>";

Upvotes: 0

Related Questions