【问题标题】:html2pdf page-break-after creating issuehtml2pdf page-break-after 创建问题
【发布时间】:2013-06-27 11:23:15
【问题描述】:

我想使用 css 属性“page-break-after”创建新页面。我已按照Page break in Html2Pdf 上给出的所有步骤进行操作,但出现以下错误。

如您所见...第二页从第一页结束的地方开始。我希望第二页从顶部开始。

<?
/*
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;
    }
}
?>

【问题讨论】:

  • 你能分享你的php代码吗
  • 我已经用 php 代码更新了我的问题
  • $_GET['vuehtml'] 包含所有 html ??那你为什么不使用 DOM 对象,解释一下。
  • no $_GET['vuehtml'] 只是调试模式的标志。
  • 你在使用 PAGE-BREAK-AFTER 吗?这不是您的完整代码,如果不查看您的所有代码,我无法识别您的问题。@Mustafa Mansoor

标签: php html2pdf


【解决方案1】:

使用页面标签。

例如

<page>
 content here.
</page>

【讨论】:

  • 请记住,您必须在每个 &lt;page&gt; 中重新定义 page_header 和 page_footer。
【解决方案2】:

在 html2fpdf.php

搜索这个:

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

你看到你可以使用&lt;NEWPAGE&gt;标签来定义新的页面或分页符

我使用"&lt;NEWPAGE&gt;" 它可以正常工作。

我用'HTML2FPDF_VERSION','3.0(beta)'

【讨论】:

    【解决方案3】:

    如果你还想用

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

    而不是

    <page>
    

    您还应该在_tag_close_DIV 方法中添加$this-&gt;parsingCss-&gt;setPosition();:

    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();
            }
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,并尝试使用 page-break-before 和 page-break-after ,两者都使用 DIV 标记。在分页符发生后,HTML2pdf 类似乎没有重置下一行文本的垂直起点。

      示例代码:

      (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]
      

      使用 page 标签插入分页符的示例代码:

      (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>";
      

      【讨论】:

      • 是的,我知道。我试图让你知道我和你在同一条船上,并让你知道我尝试了什么。我写信给开发商,但还没有回音。
      • 有人告诉我使用 标签。我尝试过这个。将 放在所需的分页符位置,然后将 放在页面末尾。上面的代码会像第二个例子一样改变。
      【解决方案5】:

      考虑pagebreak: { mode: 'avoid-all'},下面是示例选项

       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' }
      
          };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        • 2016-06-22
        • 2014-11-20
        • 2017-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多