diff --git a/CHANGELOG.md b/CHANGELOG.md
index 262ab4f4..ca4727e6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
 - Add yellow color to table for plan not allowed to purchase
 - Fix Radius pool select
 - add price to reminder notification
+- Support thermal printer for invoice
 
 ## 2024.1.15
 
diff --git a/system/autoload/Lang.php b/system/autoload/Lang.php
index 6736c700..38d56e3a 100644
--- a/system/autoload/Lang.php
+++ b/system/autoload/Lang.php
@@ -99,4 +99,28 @@ class Lang
         }
         return $result;
     }
+
+    /**
+     * $pad_type
+     * 0 Left
+     * 1 right
+     * 2 center
+     * */
+    public static function pad($text, $pad_string = ' ', $pad_type = 0){
+        global $config;
+        $cols = 37;
+        if($config['printer_cols']){
+            $cols = $config['printer_cols'];
+        }
+        return str_pad($text, $cols, $pad_string, $pad_type);
+    }
+
+    public static function pads($textLeft, $textRight, $pad_string = ' '){
+        global $config;
+        $cols = 37;
+        if($config['printer_cols']){
+            $cols = $config['printer_cols'];
+        }
+        return $textLeft.str_pad($textRight, $cols-strlen($textLeft), $pad_string, 0);
+    }
 }
diff --git a/ui/ui/app-settings.tpl b/ui/ui/app-settings.tpl
index f84b56f5..12854e41 100644
--- a/ui/ui/app-settings.tpl
+++ b/ui/ui/app-settings.tpl
@@ -53,6 +53,14 @@
                             <input type="text" class="form-control" id="phone" name="phone" value="{$_c['phone']}">
                         </div>
                     </div>
+                    <div class="form-group">
+                        <label class="col-md-2 control-label"><i class="glyphicon glyphicon-print"></i> Print Max Char</label>
+                        <div class="col-md-6">
+                            <input type="number" required class="form-control" id="printer_cols" placeholder="37" name="printer_cols"
+                                value="{$_c['printer_cols']}">
+                        </div>
+                        <span class="help-block col-md-4">For invoice print using Thermal Printer</span>
+                    </div>
                     <div class="form-group">
                         <label class="col-md-2 control-label">Theme</label>
                         <div class="col-md-6">
diff --git a/ui/ui/invoice-print.tpl b/ui/ui/invoice-print.tpl
index 09899735..21b98a93 100644
--- a/ui/ui/invoice-print.tpl
+++ b/ui/ui/invoice-print.tpl
@@ -21,30 +21,27 @@
             <table width="200">
                 <tr>
                     <td>
-                        <fieldset>
-                            <center>
-                                <b>{$_c['CompanyName']}</b><br>
-                                {$_c['address']}<br>
-                                {$_c['phone']}<br>
-                            </center>
-                            ============================================<br>
-                            INVOICE: <b>{$d['invoice']}</b> - {$_L['Date']} : {$date}<br>
-                            {$_L['Sales']} : {$_admin['fullname']}<br>
-                            ============================================<br>
-                            {$_L['Type']} : <b>{$d['type']}</b><br>
-                            {$_L['Plan_Name']} : <b>{$d['plan_name']}</b><br>
-                            {$_L['Plan_Price']} : <b>{Lang::moneyFormat($d['price'])}</b><br>
-                            <br>
-                            {$_L['Username']} : <b>{$d['username']}</b><br>
-                            {$_L['Password']} : **********<br>
-                            {if $in['type'] != 'Balance'}
-                                <br>
-                                {$_L['Created_On']} : <b>{Lang::dateAndTimeFormat($d['recharged_on'],$d['recharged_time'])}</b><br>
-                                {$_L['Expires_On']} : <b>{Lang::dateAndTimeFormat($d['expiration'],$d['time'])}</b><br>
-                            {/if}
-                            ============================================<br>
-                            <center>{$_c['note']}</center>
-                        </fieldset>
+<pre style="border-style: none; background-color: white;"><b>{Lang::pad($_c['CompanyName'],' ', 2)}</b>
+{Lang::pad($_c['address'],' ', 2)}
+{Lang::pad($_c['phone'],' ', 2)}
+{Lang::pad("", '=')}
+{Lang::pads("Invoice", $in['invoice'], ' ')}
+{Lang::pads($_L['Date'], $date, ' ')}
+{Lang::pads($_L['Sales'], $_admin['fullname'], ' ')}
+{Lang::pad("", '=')}
+{Lang::pads($_L['Type'], $in['type'], ' ')}
+{Lang::pads($_L['Plan_Name'], $in['plan_name'], ' ')}
+{Lang::pads($_L['Plan_Price'], Lang::moneyFormat($in['price']), ' ')}
+{Lang::pad($in['method'], ' ', 2)}
+
+{Lang::pads($_L['Username'], $in['username'], ' ')}
+{Lang::pads($_L['Password'], '**********', ' ')}
+{if $in['type'] != 'Balance'}
+{Lang::pads($_L['Created_On'], Lang::dateAndTimeFormat($in['recharged_on'],$in['recharged_time']), ' ')}
+{Lang::pads($_L['Expires_On'], Lang::dateAndTimeFormat($in['expiration'],$in['time']), ' ')}
+{/if}
+{Lang::pad("", '=')}
+{Lang::pad($_c['note'],' ', 2)}</pre>
                     </td>
                 </tr>
             </table>
diff --git a/ui/ui/invoice.tpl b/ui/ui/invoice.tpl
index 0c9fa384..eec58810 100644
--- a/ui/ui/invoice.tpl
+++ b/ui/ui/invoice.tpl
@@ -5,42 +5,36 @@
         <div class="panel panel-hovered panel-primary panel-stacked mb30">
             <div class="panel-heading">{$in['invoice']}</div>
             <div class="panel-body">
-                <div class="well">
-                    <fieldset>
-                        <center>
-                            <b>{$_c['CompanyName']}</b><br>
-                            {$_c['address']}<br>
-                            {$_c['phone']}<br>
-                        </center>
-                        ====================================================<br>
-                        INVOICE: <b>{$in['invoice']}</b> - {$_L['Date']} : {$date}<br>
-                        {$_L['Sales']} : {$_admin['fullname']}<br>
-                        ====================================================<br>
-                        {$_L['Type']} : <b>{$in['type']}</b><br>
-                        {$_L['Plan_Name']} : <b>{$in['plan_name']}</b><br>
-                        {$_L['Plan_Price']} : <b>{Lang::moneyFormat($in['price'])}</b><br>
-                        {$in['method']}<br>
-                        <br>
-                        {$_L['Username']} : <b>{$in['username']}</b><br>
-                        {$_L['Password']} : **********<br>
-                        {if $in['type'] != 'Balance'}
-                            <br>
-                            {$_L['Created_On']} : <b>{Lang::dateAndTimeFormat($in['recharged_on'],$in['recharged_time'])}</b><br>
-                            {$_L['Expires_On']} : <b>{Lang::dateAndTimeFormat($in['expiration'],$in['time'])}</b><br>
-                        {/if}
-                        =====================================================<br>
-                        <center>{$_c['note']}</center>
-                    </fieldset>
-                </div>
-                <form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank">
-                    <input type="hidden" name="id" value="{$in['id']}">
-                    <a href="{$_url}prepaid/list" class="btn btn-primary btn-sm"><i
-                            class="ion-reply-all"></i>{$_L['Finish']}</a>
-                    <a href="{$_url}prepaid/view/{$in['id']}/send" class="btn btn-info text-black btn-sm"><i
-                        class="glyphicon glyphicon-envelope"></i> {Lang::T("Resend To Customer")}</a>
-                    <button type="submit" class="btn btn-default btn-sm"><i class="fa fa-print"></i>
-                        {$_L['Click_Here_to_Print']}</button>
-                </form>
+<pre><b>{Lang::pad($_c['CompanyName'],' ', 2)}</b>
+{Lang::pad($_c['address'],' ', 2)}
+{Lang::pad($_c['phone'],' ', 2)}
+{Lang::pad("", '=')}
+{Lang::pads("Invoice", $in['invoice'], ' ')}
+{Lang::pads($_L['Date'], $date, ' ')}
+{Lang::pads($_L['Sales'], $_admin['fullname'], ' ')}
+{Lang::pad("", '=')}
+{Lang::pads($_L['Type'], $in['type'], ' ')}
+{Lang::pads($_L['Plan_Name'], $in['plan_name'], ' ')}
+{Lang::pads($_L['Plan_Price'], Lang::moneyFormat($in['price']), ' ')}
+{Lang::pad($in['method'], ' ', 2)}
+
+{Lang::pads($_L['Username'], $in['username'], ' ')}
+{Lang::pads($_L['Password'], '**********', ' ')}
+{if $in['type'] != 'Balance'}
+{Lang::pads($_L['Created_On'], Lang::dateAndTimeFormat($in['recharged_on'],$in['recharged_time']), ' ')}
+{Lang::pads($_L['Expires_On'], Lang::dateAndTimeFormat($in['expiration'],$in['time']), ' ')}
+{/if}
+{Lang::pad("", '=')}
+{Lang::pad($_c['note'],' ', 2)}</pre>
+<form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank">
+    <input type="hidden" name="id" value="{$in['id']}">
+    <a href="{$_url}prepaid/list" class="btn btn-primary btn-sm"><i
+            class="ion-reply-all"></i>{$_L['Finish']}</a>
+    <a href="{$_url}prepaid/view/{$in['id']}/send" class="btn btn-info text-black btn-sm"><i
+        class="glyphicon glyphicon-envelope"></i> {Lang::T("Resend To Customer")}</a>
+    <button type="submit" class="btn btn-default btn-sm"><i class="fa fa-print"></i>
+        {$_L['Click_Here_to_Print']}</button>
+</form>
 
             </div>
         </div>