Step 01: Adding routes for exporting pdf inside auth middleware
// so whole auth routes will be like below Route::group(['middleware'=> [ 'auth']], function() { Route::get('/orders/export_to_pdf/{order}', [\App\Http\Controllers\OrderController::class,'export_pdf'])->name('export_pdf'); // added route Route::resource('orders', \App\Http\Controllers\OrderController::class); Route::get( '/order_items/show_addi_req/{item}', [\App\Http\Controllers\OrderItemController::class, 'show_addi_req'] ); Route::post( '/order_items/save_req/{item}', [\App\Http\Controllers\OrderItemController::class, 'save_req'] ); Route::post('/order_items/cal_cost', [\App\Http\Controllers\OrderItemController::class, 'calculateOrderPrice'])->name('calCost'); Route::resource('order_items', \App\Http\Controllers\OrderItemController::class); Route::group(['middleware'=> ['is_admin']], function() { Route::resource('users', \App\Http\Controllers\UserController::class); Route::post('/products/save_order/{product}', [\App\Http\Controllers\ProductController::class, 'saveOrder'])->name('products.save_order'); Route::post('/profiles/save_order/{profile}', [\App\Http\Controllers\ProfileController::class, 'saveOrder'])->name('profiles.save_order'); Route::post('/frame_widths/save_order/{frame_width}', [\App\Http\Controllers\FrameWidthController::class, 'saveOrder'])->name('frame_widths.save_order'); Route::resource('products', \App\Http\Controllers\ProductController::class); Route::resource('profiles', \App\Http\Controllers\ProfileController::class); Route::resource('frame_widths', \App\Http\Controllers\FrameWidthController::class); }); });
Step 02: Adding route for download link inside td element like below inside resources/views/orders/list.blade.php
<a class="text-black" href="{{ route('export_pdf',$order->id) }}" title="Download Order Invoice"><i class="bi bi-download"></i></a>
Step 03: Adding export_pdf() like below in OrderController.php
public function export_pdf( Order $order ) { return view( 'orders.pdf', compact('order') ); }
Step 04: Getting dompdf package from github link ( https://github.com/dompdf/dompdf ) like below and setup in random folder
composer require dompdf/dompdf
afterwards, zip the whole folder and take to project's public folder and create a folder named dompdf and unzip the zip there.
Step 05: creating pdf.blade.php under resources/views/orders folder and use the following snippet
@php require_once public_path().'/dompdf/vendor/autoload.php'; use Dompdf\Dompdf; $orderData =''; $orderData.='
Order # '.$order->id.' '; $orderData.='
Company '.$order->company_name.' Phone '.$order->phone_number.' Emails '.$order->email.' Job / Post No '.$order->job_number.' '; $count = 1; foreach ($order->order_items as $orderItem) { $orderData.='
'.$order->order_items->count().' Order Items '; $count++; } //echo $orderData; exit; $dompdf = new Dompdf(); $dompdf->loadHtml($orderData); $dompdf->setPaper('A4', 'portrait'); $dompdf->render(); $dompdf->stream('invoice_'.$order->id.'.pdf'); @endphp
Material# '.$count.' '.$orderItem->product->name.' - $'.number_format($orderItem->product->cost,2).' /sf Profile '.$orderItem->profile->name.' Width(In) '.$orderItem->width.' Height(In) '.$orderItem->height.' Frame Width '.$orderItem->fwidth->name.' Total Sqare Ft '.number_format($orderItem->calculateTotSqFeet($orderItem->width,$orderItem->height),2).' Quantity '.$orderItem->quantity.' Cost '.$orderItem->cost.' Additional Requests '.(!empty($orderItem->additional_request) ?? $orderItem->additional_request).'
Now if we click on download invoice link in order list page for an order we will get the pdf exported and ready for download as pdf having all its order items.