2013-07-12 2 views
0

Я пытаюсь сориентировать текст в текстовом принтере с помощью функции php printer_write, но я знаю, что он не будет работать таким образом. Можете ли вы предложить мне способ иметь значения в таблице или div, чтобы они были организованы.Таблицы в текстовом принтере - PHP

Ниже приведен код, который я использую.

<?php 

include "connect.php"; 
include "links.php"; 

$date = DATE('D, d M, Y'); 
$i=1; 
$getData = mysql_query("SELECT * FROM facturas"); 

$dataCount = mysql_num_rows($getData); 


$handle = printer_open("Generic/Text Only"); 
printer_set_option($handle, PRINTER_MODE, "RAW"); 
printer_set_option($handle, PRINTER_TEXT_ALIGN, PRINTER_TA_RIGHT); 
printer_write($handle, $business_name . "  " . $date); 
printer_write($handle, "\n"); 
printer_write($handle, $street . ", " . $city); 
printer_write($handle, "\n"); 
printer_write($handle, $phone); 
printer_write($handle, "\n"); 
printer_write($handle, "-----------------------------------"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 

    while($showData = mysql_fetch_array($getData)){ 

    $serial = $showData['serial']; 
    $type = $showData['type']; 
    $model = $showData['model']; 
    $qty = $showData['qty']; 
    $price = $showData['price']; 

    printer_write($handle, $qty . " x " . $type . " " . $model . "....." . $price . "\n"); 
} 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 

printer_close($handle); 

?>

Этот код будет печатать хорошо, но код printer_qire в WHILE цикле будет juest печать все на каждой своей линии, работает нормально, как это должно быть, но если есть в любом случае я могу иметь эти данные в таблицах?

Это код практики на локальном сервере, и мне известно о SQL Injection.

Благодаря

+0

используйте str_pad для каждого из полей, чтобы выгрузить каждую из строк с шириной столбца перед печатью. – Orangepill

+0

что-то вроде 'str_pad (printer_write ($ handle," blah blah "), 10)' ?? –

+1

nevermind ... это назад ... вы должны сделать printer_write ($ handle, str_pad ("blah blah", 10, "")); – Orangepill

ответ

1

Вам просто нужно раздуть все ваши строки так, что сывороточный являются ширина столбца, который вы хотите. Вы можете сделать что-то вроде определения ширины столбцов в массиве.

$columnWidths = array(
     "serial"=>25, 
     "type"=>15, 
     "model"=>50, 
     "qty"=>5, 
     "price"=>10 

); 

Затем вы можете применить эти ширины столбцов в массиве showData в начале вашего цикла в то время как:

foreach($showData as $k=>$v){ 
    $showData[$k] = str_pad($showData[$k], $columnWidths[$k], " ", STR_PAD_RIGHT); 
} 

Так что полный код будет выглядеть примерно так:

<?php 

include "connect.php"; 
include "links.php"; 

$columnWidths = array(
    "serial"=>25, 
    "type"=>15, 
    "model"=>50, 
    "qty"=>5, 
    "price"=>10 

); 
$date = DATE('D, d M, Y'); 
$i=1; 
$getData = mysql_query("SELECT * FROM facturas"); 

$dataCount = mysql_num_rows($getData); 


$handle = printer_open("Generic/Text Only"); 
printer_set_option($handle, PRINTER_MODE, "RAW"); 
printer_set_option($handle, PRINTER_TEXT_ALIGN, PRINTER_TA_RIGHT); 
printer_write($handle, $business_name . "  " . $date); 
printer_write($handle, "\n"); 
printer_write($handle, $street . ", " . $city); 
printer_write($handle, "\n"); 
printer_write($handle, $phone); 
printer_write($handle, "\n"); 
printer_write($handle, "-----------------------------------"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 

    while($showData = mysql_fetch_array($getData)){ 
     foreach($showData as $k=>$v){ 
      $showData[$k] = str_pad(substr($showData[$k],0, $columnWidths[$k]), $columnWidths[$k], " ", STR_PAD_RIGHT); 
     } 
     $serial = $showData['serial']; 
     $type = $showData['type']; 
     $model = $showData['model']; 
     $qty = $showData['qty']; 
     $price = $showData['price']; 

     printer_write($handle, $qty . " x " . $type . " " . $model . "....." . $price . "\n"); 
    } 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 
printer_write($handle, "\n"); 

printer_close($handle); 
+0

Благодарим за ответ, он хорошо ориентирует текст, но пытается извлечь каждый столбец, а затем дал ошибку неопределенного индекса в столбцах, которые я не включил в выборку. –

Смежные вопросы