Jump to content

Show multiple pages of PDFs in the same PDF file.


sashavalentina

Recommended Posts

I want to add the function of when the user checked on the checkbox from the table of content, it will show the selected checkbox data and display it in the same PDF file with multiple pages when the "download selected invoice " button is clicked.

For example, each checked rows is a PDF file here. Suppose if i checked 6 rows, 6 pages of selected invoices will be shown the the same PDF file. I tried to use AJAX method to achieve this function but i do not know why it does not work. What i am trying to do here is i get the selected order_id and pass it to the download-in-bulk.php file. And i want to execute it one by one through loop. But i do not know why my code does not work. It somehow just went back to the home page of system when i did not direct it back to the home page. 

Can you all help me with this? on how to show multiple pages of invoices in the same PDF file. I really need this to work for my project. Thanks in advance :)

  <div class="col-12">
            <div class="card">
              <div class="card-header">
                <h4 class="card-title">Print Orders</h4>
                <?php 
                $sql = "SELECT *, ordered_items.id as orderno FROM ordered_items 
                        LEFT JOIN products ON ordered_items.product_id = products.id
                        LEFT JOIN users ON ordered_items.user_id = users.id
                        LEFT JOIN sellers ON ordered_items.seller_id = sellers.id WHERE ordered_items.order_status = 5 GROUP BY ordered_items.order_id
                        ORDER BY ordered_items.order_datetime DESC ";
                $query = $conn->query($sql);
                $tot_orders = mysqli_num_rows($query);
                ?>
                <b class="float-left mt-4">Total Orders ( <span class="text-success">Completed </span>): <?php echo $tot_orders; ?></b>
                 <span>
              <div class="card-body">
                <div class="table-responsive" style="max-height: 70vh">
                  <table class="table">
                    <thead class="text-primary">
                    <th style=" position: sticky;top: 0; background: white"; >
                        <input type="checkbox" id="checkAl">
                    </th>
                      <th style=" position: sticky;top: 0; background: white";>
                        Order NO / Delivery NO
                      </th>
                      <th style=" position: sticky;top: 0; background: white";>
                        Delivery / Self Pick-up Date
                      </th>
                      <th style=" position: sticky;top: 0; background: white";>
                        Order by
                      </th>
                      <th style=" position: sticky;top: 0; background: white";>
                        Revieve Item Method 
                      </th>
                      <th style=" position: sticky;top: 0; background: white";>
                        Total Price
                      </th>
            
                      <th style="text-align:center;position: sticky;top: 0; background: white;">
                        Action
                      </th>

                    </thead>
                    <tbody id="orders">
                      <?php
                      if (!$tot_orders) {
                        echo '
                          <div class="col-12">
                            <div class="badge badge-danger">No Orders Found</div>
                          </div>
                        ';
                      } else {
                        while ($row = $query->fetch_assoc()) {
                          if($row['item_deliver_method'] == 1) {
                          $item_delivery_method = '<span >Delivery</span>';
                        }
                        if($row['item_deliver_method'] == 2) {
                          $item_delivery_method = '<span >Self-Pickup</span>';
                        }
                          $grantotal = 0.00;
                          $totsql = "SELECT*, SUM(purchase_price) as total_price FROM ordered_items 
                           LEFT JOIN invoice_price ON ordered_items.order_id = invoice_price.order_id
                        LEFT JOIN discount ON invoice_price.discount_id = discount.id  
                          WHERE ordered_items.order_id = '".$row['order_id']."' ";
                          $totquery = $conn->query($totsql);
                          $totrow = $totquery->fetch_assoc();
                          $total_purchase = $totrow['total_price'];
                          $discount_amount = $totrow['discount_amount'];
                          $round_off_value = $totrow['round_off_value'];
                          if($totrow['discount_type'] == 1){
                          $grandtotal = $total_purchase - $discount_amount + $round_off_value ;
                        }
                       else{
                          $grandtotal = $total_purchase - ($total_purchase * $discount_amount/100) + $round_off_value ;
                        }
                                                  
                      ?>

                      <tr>
                        <td>
                            <input type="checkbox" id="checkItem" name="order_id[]" class="download-bulk"value="<?php echo $row["order_id"]; ?>">
                        </td>
                        <td>
                        #<?php echo $row['order_id']; ?>
                        </td>
                        <td>
                        <?php echo $row['delivery_date']; ?>
                        </td>
                        <td>
                        <?php echo $row['user_fullname']; ?>
                        </td>
                        <td class="text-center">
                        <?php echo  $item_delivery_method; ?>
                        </td>
                         <td>
                              RM<?php echo number_format  ($grandtotal,2); ?>
                         
                        </td>
                          
                       <td class="text-left">
                          <a href="invoice.php?oid=<?php echo $row['order_id']; ?>&uid=<?php echo $row['user_id']; ?>" style="text-decoration: none;color: #000; " title="Invoice">
                         <i class="fa fa-print" aria-hidden="true"></i> Print Invoice
                          </a>
                        </br>
                        <a class="text-danger" href="delivery-receipt.php?oid=<?php echo $row['order_id']; ?>&uid=<?php echo $row['user_id']; ?>" style="text-decoration: none;color: #000;" title="Delivery Receipt">
                         <i class="fa fa-print" aria-hidden="true"></i> Print Delivery Order
                          </a>
                        </td>
                      </tr>
                      <?php 
                          }
                        } 
                      ?>
                    </tbody>
                  </table>
                </div>
              </div>
            
          </div>
        </div>
      </div>
    </div>
    <div class="row">
					<button type="button" name="btn_download_bulk" id="btn_download_bulk" value="True" class="btn btn-danger btn-icon-split m-2">
							<span class="icon text-white-50">
								<i class="fa fa-trash-o"></i>
							</span>
							<span class="text">Download Selected Invoice</span>
						</button>
					</div>
  </div>


<script>
    $("#checkAl").click(function () {
    $('input:checkbox').not(this).prop('checked', this.checked);
    });
</script>
<script type="text/javascript">
    $(document).ready(function(){
      $('#btn_download_bulk').click(function(){
        // if(confirm("Are you sure you want to delete these products?"))
        // {
            var id=[];

            $(':checkbox:checked').each(function(i){
              id[i] = $(this).val();

            });

            if(id.length === 0){
              alert("Please select at least one invoice");
            }else if (confirm("Are you sure you want to download these invoices?")){
                 document.location.href='download-in-bulk.php';
                $.ajax({
                  url:'download-in-bulk.php',
                  method:'POST',
                  data:{id:id},
                  success:function(){
                    for(var i=0; i<id.length; i++){
                      $('tr#'+id[i]+'').css('background-color','#ccc');
                      $('tr#'+id[i]+'').fadeOut('slow');
                    }
                  }

                });
            
        }
        else{
          return false;
        }

      });

    });
  </script>

This is my download-in-bulk.php codes

<?php
include '../session.php';
require_once('tcpdf/tcpdf.php');

if(isset($_POST["order_id"]))
{
 foreach($_POST["order_id"] as $oid)
 {
    class MYPDF extends TCPDF {
        // Page footer
        public function Footer() {
            // Position at 25 mm from bottom
            $this->SetY(-5);
            // Set font
            $this->SetFont('helvetica', '', 9);
            $this->SetTextColor(0,0,0);
            
            $this->Cell(0, 0, 'This receipt was generated by computer no signed was needed.', 0, 0, 'C');
            $this->Ln();   
        }   
    }

    $pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    //$pdf = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);  
    $pdf->SetCreator(PDF_CREATOR);  
    $pdf->SetTitle('Invoice');
    $pdf->SetHeaderData('', '', PDF_HEADER_TITLE, PDF_HEADER_STRING);  
    $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));  
    $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));  
    $pdf->SetDefaultMonospacedFont('helvetica');  
    $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);  
    $pdf->SetMargins(PDF_MARGIN_LEFT, '10', PDF_MARGIN_RIGHT);
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(TRUE);
    $pdf->SetAutoPageBreak(TRUE, 10);
    
    $pdf->SetFont('times', '', 7);
    $pdf->setCellHeightRatio(0.45);
    $pdf->AddPage();
    

	                      
    date_default_timezone_set("Asia/Kuala_Lumpur");

	
    $htmlcontent="";



    $isql = "SELECT *, DATE(order_datetime) as orderdate FROM ordered_items 
    LEFT JOIN products ON ordered_items.product_id = products.id 
    LEFT JOIN users ON ordered_items.user_id = users.id
    LEFT JOIN billing_address ON billing_address.user_id = users.id
    LEFT JOIN brand  ON products.product_brand = brand.id
    LEFT JOIN sellers ON ordered_items.seller_id = sellers.id
    LEFT JOIN invoice_price ON ordered_items.order_id = invoice_price.order_id
    WHERE ordered_items.order_id = '".$order_id."' AND ordered_items.user_id= '".$user_id."' GROUP BY ordered_items.order_id";
    $iquery = $conn->query($isql);
    while ($irow = $iquery->fetch_assoc()) {
      if($irow['payment_term'] == 1) {
        $payment_type = 'Cash';
      }
      if($irow['payment_term'] == 2) {
        $payment_type = 'Credit';
      }
    $htmlcontent .='

    <table cellpadding="2" width="102%" style="background-color: #000;marging: 100px;">
        <tr>
            <td style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 17px;">
                Invoice Number
            </td>
            
            <td align="right" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 17px;">
                #'.$order_id.'
            </td>
        </tr>
    </table>
    <p></p>

        <hr width = "102%" style="color: #DBDBDB;">
       
        <tr>
            <td width="80%"  align="justify" style="font-weight: normal;font-size: 10px;line-height: 17px;color: #000000;">
            <b>'.$irow['user_fullname'].'</b> <b>(0'.$irow['user_phone'].')</b>
            <br>
            '.$irow['bill_address'].', 
            '.$irow['bill_city'].', '.$irow['bill_postcode'].', '.$irow['bill_state'].'
            </td>
            <td width="20%" align="right" style="font-weight: bold;font-size: 10px;line-height: 17px;">
            <b>'.$irow['orderdate'].'</b>
        </td>
        </tr>

    </table>
    ';
    $htmlcontent .='

    <table cellpadding="2" width="102%" style=" marging: 100px;">
        <tr>
            <td style="color:#000;font-weight: bold;font-size: 10px;line-height: 10px;">
                Payment Term : '.$payment_type.'
            </td>
        </tr>
    </table>
    ';



    $htmlcontent .='
    <table cellpadding="1" style="background-color: #4c4646;">
    <tr>
        <td  width= "8%" style="color:#FFF;font-weight: bold;font-size: 8px;line-height: 10px;">
            No.
        </td>
        
        <td width= "60%" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
            Product Title
        </td>
        <td width= "9%" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
            U.Price
        </td>
        <td width= "7%" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
            QTY
        </td>
        <td width= "7%"  style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
            UOM
        </td>
        <td width= "11%"style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
            Amount
        </td>
    </tr>
</table>
';
    }


$i = 0;
$sql = "SELECT * FROM ordered_items 
LEFT JOIN products ON ordered_items.product_id = products.id 
WHERE ordered_items.order_id = '".$order_id."' ";
$query = $conn->query($sql);
while ($row = $query->fetch_assoc()) {
            $htmlcontent .='
            <table id="receiptcontent" cellpadding="1" style="max-height: 1000px;  ">
            <tr>
            <hr width = "102%">
                    <td  width= "4%"  style="font-weight: normal;font-size: 8px;line-height: 8px;color: #000000;">
                    '. ++$i .' .
                    </td>
                    <td width= "64%"  style=" font-weight: normal;font-size: 8px;line-height: 8px;color: #000000;">
                    '.$row['product_title'].'
                    </td>
                    <td width= "8%"style=" text-align: justify; font-weight: normal;font-size: 8px;line-height: 8px;color: #000000;">
                    RM '.$row['product_buy_price'].'
                  </td>
                     <td width= "8%" style=" text-align: center;font-weight: normal;font-size: 8px;line-height: 8px;color: #000000;">
                       '.$row['quantity'].' 
                    </td>
                    <td width= "7%" style=" text-align: center;font-weight: normal;font-size: 8px;line-height: 8px;color: #000000;">
                    '.$row['quantity_unit'].'
                 </td>
                 <td width= "4%" style="font-weight: normal;font-size: 8px;line-height: 8px;color: #000000;">
                        RM 
                    </td>
                    <td width= "6%"style="text-align: right; font-weight: normal;font-size: 8px;line-height: 8px;color: #000000;">
                        '.$row['purchase_price'].'
                    </td>
                   
                </tr>
                
            </table>
        
            ';
}

$totsql = "SELECT SUM(purchase_price) as total_price , order_id  FROM ordered_items 
WHERE order_id = '".$order_id."' ";
$totquery = $conn->query($totsql);
while ($totrow = $totquery->fetch_assoc()) {

            $htmlcontent .='
            <p></p>
            <table cellpadding="3" style="background-color: #4c4646;">
                <tr>
                    <td width="86.8%" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
                     Sub Price
                    </td>
                    <td width="6%" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
                     RM
                    </td>
                    <td width="10%"align="right" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
                    '.number_format($totrow['total_price'],2).'
                    </td>
                </tr>
            </table>
            <br>
            ';
}


$sub_price = 0.00;
$total_price = 0.00;
$sql1="SELECT *, SUM(purchase_price) as ordertotalprice FROM ordered_items 
LEFT JOIN invoice_price ON ordered_items.order_id = invoice_price.order_id
LEFT JOIN discount ON invoice_price.discount_id = discount.id
WHERE ordered_items.order_id = '".$order_id."' ";
$query1 = $conn->query($sql1);
$row1 = $query1->fetch_assoc();
$discount_price = $row1['discount_amount'];
$price = $row1['ordertotalprice'];
if($row1['ordertotalprice'] < 500.00 && $row1['item_deliver_method'] == 1){
$deliveryfee = 10.00;
$total_price =  $sub_price + $deliveryfee;
}else{
$deliveryfee = 0.00;
$total_price =  $sub_price + $deliveryfee;
}
if($row1['discount_type'==1]){
$deduct_price = $discount_price;

}else{
    $disprice = $price * ($discount_price/100);
    $deduct_price = $disprice;
}

$query1 = $conn->query($sql1);
while ($row1 = $query1->fetch_assoc()) {

            $htmlcontent .='
            <p></p>
            <table cellpadding="1">
                <tr>
                <td width= "12.5%" style="color:#000;font-size: 8px;line-height: 2px;">
                </td>
                   <td width= "75%" style="color:#000;font-size: 8px;line-height: 2px;">
                       Delivery Fees
                   </td>
                   <td width= "9.5%" style="color:#000;font-size: 8px;line-height: 2px;">
                       RM
                   </td>
                    <td width= "5%"  align="right" style="color:#000;font-size: 8px;line-height: 2px;">
                       '.number_format($deliveryfee,2).'
                    </td>
                </tr>
        
            </table>
            <br>
            <p></p>
            <table cellpadding="1">
                <tr>
                 <td width= "12.5%" style="color:#000;font-size: 8px;line-height: 2px;">
                 </td>
                    <td width= "75%" style="color:#000;font-size: 8px;line-height: 2px;">
                        Discount ('.$row1['discount_name'].')
                    </td>
                    <td width= "9.5%" style="color:#000;font-size: 8px;line-height: 2px;">
                        RM
                    </td>
                    <td width= "5%" align="right" style="color:#000;font-size: 8px;line-height: 2px;">
                   - '.number_format($deduct_price,2).'
                    </td>
                </tr>
        
            </table>
            <br>
            <p></p>
            <table cellpadding="1">
            <tr>
            <td width= "12.5%" style="color:#000;font-size: 8px;line-height: 2px;">
            </td>
               <td width= "75%" style="color:#000;font-size: 8px;line-height: 2px;">
                   Round off
               </td>
               <td width= "9.5%" style="color:#000;font-size: 8px;line-height: 2px;">
                   RM
               </td>
               <td width= "5%" align="right" style="color:#000;font-size: 8px;line-height: 2px;">
                  '.$row1['round_off_value'].'
                </td>
                </tr>
        
            </table>
            <br>
            ';
}


$sub_price2 = 0.00;
$total_price2 = 0.00;
$sql2="SELECT *, SUM(purchase_price) as grandtotal FROM ordered_items 
LEFT JOIN invoice_price ON ordered_items.order_id = invoice_price.order_id
LEFT JOIN discount ON invoice_price.discount_id = discount.id
WHERE ordered_items.order_id = '".$order_id."' ";
$query2 = $conn->query($sql2);
$row2 = $query2->fetch_assoc();
$sub_price2 = $row2['grandtotal'] - $deduct_price + $row2['round_off_value']  ;
if($row2['grandtotal'] < 500.00 && $row2['item_deliver_method'] == 1){
$deliveryfee = 10.00;
$total_price2 =  $sub_price2 + $deliveryfee;
}else{
$deliveryfee = 0.00;
$total_price2 =  $sub_price2 + $deliveryfee;
}
$query2 = $conn->query($sql2);
while ($row2 = $query2->fetch_assoc()) {

            $htmlcontent .='
            <p></p>
            <table cellpadding="3" style="background-color:  #000">
                <tr>
                    <td width="86.8%" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
                     Total Price
                    </td>
                    <td width="6%" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
                     RM
                    </td>
                    <td width="10%"align="right" style="color:#FFF;font-weight: bold;font-size: 10px;line-height: 10px;">
                       '.number_format($total_price2,2).'
                     
                    </td>
                </tr>
            </table>
            <br>
            ';
}

    $pdf->IncludeJS($js);
    $pdf->writeHTML($htmlcontent);  
    ob_end_clean(); 
    $pdf->Output('invoice.pdf', 'D');
 
 }
}

?>

 

Link to comment
Share on other sites

Not familiar with the TCPDF (using FPDF) but if I had to create one pdf file from multiple data requests, I would simply generate the first set of data, output that to my already-opened pdf file and repeat until done.  Only then would I close the pdf and output it.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.