Joshua Blevins
Joshua Blevins

Reputation: 183

dompdf error cant figure this one out

I am getting this error:

Catchable fatal error: Argument 1 passed to DOMNode::appendChild() must be an instance of DOMNode, null given, called in /home/emscompl/public_html/pdf_email/dompdf/include/table_frame_decorator.cls.php on line 304 and defined in /home/emscompl/public_html/pdf_email/dompdf/include/frame.cls.php on line 726

Here is the dompdf code.

<?php


/*$dir = dirname(__FILE__);
 require_once($dir.'/dompdf/dompdf_config.inc.php');

  $dompdf = new DOMPDF();

  $dompdf->load_html_file("http://ems-complete.com/pdf_email/patient-report.php");

    $dompdf->render(); 

    $dompdf->stream("file.pdf");*/

    $course = $_REQUEST['course'];

    $dir = dirname(__FILE__);

 require_once($dir.'/dompdf/dompdf_config.inc.php');
  $dompdf = new DOMPDF();

   $dompdf->load_html(file_get_contents("http://ems-complete.com/courseroster/courseroster.php?course=".$course));      


  $dompdf->render();
 // $dompdf->set_paper(2412, 3222);
  $dompdf->stream("courseroster.pdf");

 // exit(0);


?>  

Here is the PHP HTML

<html>
<head>
<link type="text/css" media="screen" rel="stylesheet" href="stylesheets/courseroster.css" />

<link type="text/css" media="print" rel="stylesheet" href="stylesheets/print.css" />
</head>

<body>
<SCRIPT LANGUAGE="JavaScript"> 
function PrintDivData(crtlid)
 {
 var ctrlcontent = document.getElementById(crtlid);
 var printscreen = window.open('','','left=1,top=1,width=1,height=1,toolbar=0,scrollbars=0,status=0​');
 printscreen.document.write(ctrlcontent.innerHTML);
 printscreen.document.close();
 printscreen.focus();
 printscreen.print();
 printscreen.close();
 }
</script>

<input type="button" name="Print" value="Print" onClick="javascript:PrintDivData('container');" Runat="Server" />
<?php
 $course = $_REQUEST['course'];?>
<?php 
        $connect = mysql_connect('localhost','db','pass') or die(mysql_error());

        $selectdb = mysql_select_db('emscompl_joom1283',$connect);
        ?>
<?php   
$qry = "SELECT * FROM courses 
WHERE id = $course";
        $result = mysql_query($qry);
        $row = mysql_fetch_array($result);


$qry2 = "SELECT s.fullname, cs.* FROM registered_users AS `s`
LEFT OUTER JOIN course_students AS cs ON s.userid = cs.userid
WHERE cs.courseid = $course
ORDER BY s.fullname";
        $result2 = mysql_query($qry2);

     echo "<a href=http://www.ems-complete.com/pdf_email/form_courseroster.php?course=".
     $course.">Display PDF</a>";?>
<div class="container" id ="container">
  <div class="header"><?php echo $row['coursename'];?> Roster</div>
  <div class="coursestatus"><p>Course Status</p>
    <p><?php echo $row['status'];?></p>
  </div>
  <div class="startdate"><p>Start Date</p>
    <p><?php echo $row['startdate'];?></p>
  </div>
  <div class="enddate"><p>End Date</p>
    <p><?php echo $row['enddate'];?></p>
  </div>
  <div class="dayofweek"><p>Class Held on:</p>
    <p><?php echo $row['dayofweek'];?></p>
  </div>
  <div class="leadinstructor"><p>Lead Instructor</p>
    <p><?php echo $row['leadinstructor'];?></p>
  </div>
  <div class="assistantinstructor"><p>Assistant Instructors</p></div>
  <div class="enrolledstudents">
    <p>Enrolled Sutdents</p>
    <table width="760" border="0">
      <tr>
        <th width="223">Student Name</th>
        <th width="102">Phone</th>
        <th width="90">Email</th>
        <th width="100">Status</th>
        <th width="220">Document Report</th>
      </tr>
      <tr>
      <?php while ($row2 = mysql_fetch_array($result2)) { ?>
        <td><?php echo $row2['fullname'];?></td>
        <td><?php echo $row2[''];?></td>
        <td><?php echo $row2[''];?></td>
        <td><?php if ($row2['studentstatus']== 0 ){
        echo "Interested";
        }
        else if ($row2['studentstatus']== 1 ){
        echo "Entrance Process";
        }
        else if ($row2['studentstatus']== 2 ){
        echo "Incomplete Entrance Process";
        }
        else if ($row2['studentstatus']== 3 ){
        echo "Enrolled";
        }
        else if ($row2['studentstatus']== 4 ){
        echo "Course Completed";
        }
        else if ($row2['studentstatus']== 5 ){
        echo "NREMT Skills Complete";
        }
        else if ($row2['studentstatus']== 6 ){
        echo "NREMT Cognitive Complete";
        }
        else if ($row2['studentstatus']== 7 ){
        echo "State Certified";
        }?></td>
        <td><?php echo "<a href=http://www.ems-complete.com/courseroster/studentdocuments.php?id=".$row2['id'].">Document Report</a>"
        ;?>
        </td>
      </tr>
      <?php } ?>
    </table>
    <p>&nbsp;</p>
  </div>
  <div class="footer">
    <p>&nbsp;</p>
  </div>
</div>

</body>
</html>

Upvotes: 2

Views: 5671

Answers (1)

BrianS
BrianS

Reputation: 13914

In your HTML-generating script you have an opening TR outside the while loop that looks like it should be inside the loop (the closing tag is inside the loop). This will cause an invalid document structure, and apparently one which dompdf is unable to parse.

FYI, the first thing to do if dompdf won't parse a document is to run it through a validator.

Upvotes: 4

Related Questions