Search code examples
laravellaravel-8dompdf

DomPDF is displaying output as HTML not as PDF document


I'm facing an issue with domPDF. pdf result getting displayed as html page not as pdf document. I'm trying to get the data from database and get the result in pdf document using 'dompdf' for laravel.

pdf-output-image

1

here is my HTML code.

    `<!DOCTYPE html>
<html>
<head>
    <title>MHT Order PDF</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>

</head>
<body>
    <div class="d-block text-center" style="text-align: center; margin-top: -15px;">
        <h1 style="text-align: center" class="navbar-brand text-underline text-center"><u> MAJESTIC HOUSE </u></h1>
        <p style="margin-top:-20px">General Trading LLC</p>

    </div>
    <div class="order_heading">
        @foreach($orderDtls as $order)
        <p class="date">Date: {{$date}}</p>
        <h3 class="orderDtls">Order Details </h3>
        <h5 class="details">Order UID: <strong style="color: red;">{{$order->order_unq_id}}</strong></h5>
        <h5 class="details">Customer Name: <strong style="color: red;">{{$order->customer_name}}</strong></h5>
        <p id="date">  </p>
    </div>
    <table class="table caption-top" id="orderTable">
        <caption>Order Details</caption>
        <thead>
          <tr>
            <th scope="col">Customer Name</th>
            <th scope="col">Product Name</th>

          </tr>
        </thead>
        <tbody>
            @foreach($orderDtls as $order)
          <tr>
            <td scope="row">{{$order->customer_name}}</td>
            <td>{{$order->item_name}}</td>
          </tr>
          @endforeach
        </tbody>
    </table>
      @endforeach
</body>
</html>

this is the code from Controller

public function mht_order_pdf(){
    $customers = Customer::all();
    $linkeds = Linked::all();
    $orders = Order::all();
    $date = date('y-m-d');

    $orderDtls = DB::select("SELECT
            customers.customer_name,
            orders.id,
            orders.order_unq_id,
            items.item_name,
            orders.item_quantity,
            orders.total
        FROM customers
        JOIN linkeds
            ON customers.id = linkeds.customer_id
        JOIN items
            ON linkeds.item_id = items.id
        JOIN orders
            ON linkeds.id = orders.linked_id
        WHERE orders.order_unq_id = 'MH-Ord/29722/xyz supermarket';"
    );
    // // return $orderDtls;
    return view('mht_order_pdf', compact('customers', 'linkeds', 'orders', 'orderDtls', 
 'date'));
    

    $pdf = PDF::loadView('mht_order_pdf', $orderDtls);

    return $pdf->stream('mht_order_pdf.pdf');
}

this is the code from web.php

<?php

use App\Http\Controllers\Backend\CustomerController;
use App\Http\Controllers\Backend\ItemController;
use App\Http\Controllers\Backend\LinkedController;
use App\Http\Controllers\Backend\OrderController;
use App\Http\Controllers\Backend\ProductController;
use App\Http\Controllers\Backend\UserController;
use App\Http\Controllers\PDFController;
use App\Models\Customer;
use App\Models\Linked;
use App\Models\Order;
use App\Models\Product;
use Illuminate\Support\Facades\Route;
use Dompdf\Dompdf;
use Illuminate\Support\Facades\DB;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
return view('welcome');
});

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])- 
>name('home');
Route::resource('users', UserController::class);
Route::resource('products', ProductController::class);
Route::resource('items', ItemController::class);
Route::resource('customers', CustomerController::class);
Route::resource('linked', LinkedController::class);
Route::resource('orders', OrderController::class);

Route::get('mht_order_pdf', [OrderController::class, 'mht_order_pdf'])- 
>name('mht_order_pdf');

PLEASE LET ME KNOW WHAT I'M DOING WRONG? Thank you!


Solution

  • Your controller stops at this line:

    return view('mht_order_pdf', compact('customers', 'linkeds', 'orders', 'orderDtls', 'date'));
    

    thus the 2 lines below it, which related to the DomPDF, gets ignored. Try to delete the return view() above so that the DomPDF lines of code below it can be executed.