แนวทาง การเชื่อมต่อ Printer ด้วย PHP และการใช้งานเบี้องต้น

เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdee
phpprinter printer

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ phpprinter printer

ดูแล้ว 16,000 ครั้ง


    เนื้อหาต่อไปนี้ เป็นแนวทางการใช้งาน Printer ผ่านการใช้งานคำสั่งของ PHP อย่างง่าย ซึ่งโดยปกติแล้ว
คำสั่งการใช้งานที่ใช้กับ Printer จะเป็นชุดคำสั่งของ extension ที่รองรับการใช้งานเฉพาะใน Windows 
เท่านั้น โดยก่อนใช้งาน เราจำเป็นต้องทำการติดตั้ง extension นี้ก่อน
    สำหรับการใช้งาน Printer ผ่าน คำสั่ง PHP นั้น จะเป็นคำสั่ง ที่มีความสามารถระดับเบื้องต้นเท่านั้น จะไม่
สามารถสั่งพิมพ์ไฟล์เอกสารที่มีรูปแบบ อย่าง word pdf หรือไฟล์รูปภาพจากไฟล์ภายนอกได้ ลักษณะการใช้
งานจะเป็นการพิมพ์ข้อความอย่างง่าย และมีการจัดรูปแบบข้อความที่ไม่ซับซ้อน หรือการพิมพ์รูปวาดลักษณะ
ต่างๆ ตามที่คำสั่ง จะสามารถทำได้  ดังนั้น ลักษณะการพิมพ์ อาจจะเหมาะกับการพิมพ์ข้อความ เช่น ใบเสร็จรับเงิน
/ใบกำกับภาษีอย่างย่อ ใบสั่งซื้อสินค้า ผ่านเครื่องพิมพ์ในระบบ POS แบบนั้นเป็นต้น แต่อย่างไรก็ตาม ก็ขึ้นกับแนวทาง
การนำปรับไปประยุกต์เพิ่มเติม 
 

    การติดตั้ง Printer extension 

    ก่อนใช้งาน เรามาลองเรียกคำสั่ง เชื่อมต่อกับ printer ดูก่อนว่า จะแจ้ง error กรณียังไม่พร้อมใช้งานอย่างไร
โดยใช้คำสั่ง ดังนี้
 
<?php
echo phpversion(); // คำสั่งเช็คเวอร์ชั่น php
$handle = printer_open();
var_dump($handle);
?>
 
ผลที่ได้ จะเป็นตามรูป
 
 


 
 
ยังไม่มีคำสั่ง หรือ undefined function printer_open() ให้เราทำการติดตั้ง ก่อน
โดยให้ไปทำการดาวน์โหลดไฟล์ php_printer.dll  ได้ที่ลิ้งค์ด้านล่าง
 
 


 
 
เลือกโหลดเวอร์ชั่นที่สอดคล้องกับเวอร์ชั่น PHP ของเรา เช่นเป็นเวอร์ชั่นที่สูงกว่า php เวอร์ชั่น
ของเราไม่มากนัก ในที่นี้ เวอร์ชั่น php ที่เครื่องเป็น 5.6.11 (เวอร์ชั่น php ที่เครื่อง หมายถึง เครื่องที่เราจำลอง
เป็น server อาจจะเป็นเครื่องในเครือข่ายระบบ Lan หรือ Wan ก็ได้) จึงโหลดไฟล์ php_printer-php5.6.21.zip
จากลิ้งค์ข้างต้น 
    หลังจากดาวน์โหลดแล้ว ให้เราแตกไฟล์ แล้วเอาไฟล์ php_printer.dll ไปไว้ในโฟลเดอร์ extension ของ
php ในที่นี่ จะอยู่ในโฟลเดอร์ C > xampp > php > ext  ตามรูปด้านล่าง เนื่องจากผู้เขียนใช้ xampp เป็น
ตัวจำลอง server
 
 

 
 
    จากนั้นให้เราเปิดไฟล์ php.ini จัดการผ่านตัวจัดการ server จำลอง หรือ กดปุ่ม Windows + R พร้อมกัน
แล้วพิมพ์คำว่า php.ini แล้วกด enter จะแสดงส่วนจัดการการตั้งค่าต่างๆ ใน PHP    ให้เราเลื่อนไปในส่วนของ
การกำหนด extension หรือค้นคำว่า Windows Extensions ในไฟล์ php.ini ก็จะไปยังบรรทัดนั้นได้เร็วขึ้น
ให้เราเพิ่มการเปิดใช้งาน extension ของ printer ดังนี้ 
 
extension=php_printer.dll
 
ดังรูป
 



 
 
ในตัวอย่างเราเพิ่มไปด้านบนสุด ทำการบันทึก แล้วทำการ restart server เสร็จแล้วทดสอบคำสั่ง
การเชื่อมต่อกับ printer ของเราใหม่ จากโค้ดตัวอย่างด้านบน อีกครั้ง จะได้ผลลัพธ์เป็นดังรูป
 
<?php
$handle = printer_open();
var_dump($handle);
?>
 
ผลลัพธ์ที่ได้ 
 
 


 
 
แสดงว่าตอนนี้เราสามารถใช้คำสั่ง printer ใน php ได้แล้ว


 

    การเลือก Printer

    หลังจากที่เราได้ทดสอบการทำงานของคำสั่ง printer ไปเบื้องต้นแล้ว จะเห็นว่าเราใช้คำสั้ง
printer_open() โดยไม่ได้ระบุชื่อของเครื่อง printer การทำงานก็จะไปเลือกตัวเครือง printer ที่เป็นค่า default
มาให้ แต่กรณีที่เราต้องการระบุชื่อของ printer ไม่ว่าจะเป็นตัว printer ที่เชื่อมต่อกับเครื่องของเราเองโดยตรง
หรือเชื่อมต่อผ่านระบบเครื่อข่าย Lan/Wan และมีการแชร์เครื่องปริ้นไว้แล้ว เราสามารถทำได้ดังนี้
    มาดูเครื่อง printer ของผู้เขียน ตามรูปด้านล่าง จะเห็นว่า ไม่ได้ต่อเครื่อง printer จริงๆ ไว้ แต่จะมีรายชื่อ
เครื่อง printer เสมือน หรือ virtual printer อย่าง Microsoft Print to PDF หรือ Soda PDF ที่เป็นลักษณะ
ส่งออกเป็นไฟล์ pdf แทนการพิมพ์ออกทางเอกสารกระดาษ ซึ่งเราจะอาศัยคุณสมบัตินี้ มาเป็นตัวอย่าง
แสดงเอกสารก่อนพิมพ์ แทนการพิมพ์จริง
 


 
 
เราสามารถนำชื่อของ เครื่อง printer มากำหนดในคำสั่ง printer_open() ได้เลย หากป้องกันการพิมพ์ผิดพลาด
สามาถคลิกขวาที่ตัว printer แล้วเลือก printer properties แล้ว copy ชื่อ printer มาใช้แทนได้
    สมมติเราใช้ Microsoft Print to PDF ก็จะกำหนดในโค้ดเป็นดังนี้
 
<?php
$handle = printer_open('Microsoft Print to PDF');
var_dump($handle);
?>
 
หากเป็นเครื่องพิมพ์ที่แชร์ไว้ในระบบเครือข่าย Lan/Wan เราสามารถระบุชื่อของเครื่องที่แชร์ หรือ IP address
ของเครื่องที่แชร์ในระบบ Lan/Wan ตามด้วยชื่อ printer ที่แชร์ ได้ สมมติว่า เครื่อง printer แชร์ไว้ที่ชื่อว่า
EPSON L310 Series PRINTER CENTER ที่เครืองผู้ใช้ ที่ชื่อ USER1 เราสามารถกำหนดการเชื่อมต่อไป
ยังเครื่อง printer นั้น ด้วยรูปแบบคำสั้งดังนี้
 
<?php
$handle = printer_open('\\\\USER1\\EPSON L310 Series PRINTER CENTER');
var_dump($handle);
?>
 
หรือกรณีเป้น IP address ก็ใช้เป็นดังนี้
 
<?php
$handle = printer_open('\\\\192.168.0.12\\EPSON L310 Series PRINTER CENTER');
var_dump($handle);
?>
 
จำไว้ว่า ก่อนใช้งานคำสั่งการเชื่อมต่อด้วยคำสั่ง php เราจำเป็นต้องตรวจสอบการเชื่อมแบบปกติก่อนเรียกใช้งาน
เช่น ถ้าเป็นเครื่องที่ต่อกับเครื่องเราโดยตรง เราต้องดูว่ามีการเชื่อมต่อและมีสถานะ online พร้อมใช้งานหรือไม่ 
เช่นเดียว กัน ถ้าเป็นการเชื่อมต่อภายในเครือข่าย Lan/Wan เราต้องทำการเชื่อมต่อปกติผ่าน Windows ก่อน 
ทั้งนี้ก็เพราะว่า เครื่อง printer บางเครื่องที่มีการแชร์ อาจกำหนดสิทธิ์การเข้าถึง หรืออาจจะมีการร้องขอการติดตั้ง Driver ที่เครื่องของเราก่อน เพื่อให้พร้อมใช้งานเครื่อง printer เป็นต้น
 
 

    การประยุกต์การใช้งาน PHP Printer

    ต่อไปจะเป็นตัวอย่างโค้ดการประยุกต์การใช้งาน หลักๆ ก็จะใช้ในการส่งข้อความไปยังเครื่องพิมพ์ และการ
จัดรูปแบบเบื้องต้น พร้อมกับการทำความเข้าใจเกี่ยวกับการจัดรูปแบบข้อความ
 
ไฟล์ตัวอย่าง 

<?php
// ฟังก์ชั่นสำหรับ กำหนดค่าของ ตัวเลขที่สัมพันธ์กับ การพิมพ์
// ตัวอย่างเช่น ขนาด 1 cm ในค่า px ที่ DPI ที่ 600 ก็จะเป็น dpimm2px(10);
// หรือ ขนาด 1 cm ในค่า px ที่ DPI 300 ก็จะเป็น dpimm2px(10,300); 
function dpimm2px($val,$dpi=600){
	return ((($dpi*0.393701)/10)*$val);	
}


$printer =  "Microsoft Print to PDF"; // กำหนดชื่อเครื่องพิมพ์
if($handle = printer_open($printer)){	
//  การตั้งค่าการพิมพ์
	printer_set_option($handle, PRINTER_COPIES, 1);
	printer_set_option($handle, PRINTER_MODE, 'text'); // (text, raw or emf)
	printer_set_option($handle, PRINTER_TITLE, 'my first doc');
	printer_set_option($handle, PRINTER_SCALE, 100); // แสดง 100%
	printer_set_option($handle, PRINTER_ORIENTATION, PRINTER_ORIENTATION_PORTRAIT);
	printer_set_option($handle, PRINTER_PAPER_FORMAT, PRINTER_FORMAT_A4);
//	printer_set_option($handle, PRINTER_RESOLUTION_X, 600);
//	printer_set_option($handle, PRINTER_RESOLUTION_Y, 600);		
//	printer_set_option($handle, PRINTER_PAPER_FORMAT, PRINTER_FORMAT_CUSTOM);
//	printer_set_option($handle, PRINTER_PAPER_LENGTH, 150);
//	printer_set_option($handle, PRINTER_PAPER_WIDTH, 550);
//	printer_set_option($handle, PRINTER_BACKGROUND_COLOR, '00FF00');
	printer_set_option($handle, PRINTER_TEXT_ALIGN, PRINTER_TA_LEFT);
//	http://php.net/manual/fa/function.printer-set-option.php // ดูการตั้งค่าต่างๆ ได้ที่ลิ้งค๋นี้

	printer_start_doc($handle, "My Document"); // กำหนดชื่อเอกสาร ที่จะ print
	printer_start_page($handle);

	// ทดสอบสร้างพื้นที่รูปสี่เหลี่ยม เพือไว้อ้างอิงตำแหน่ง เวลาใช้งานจริง ตัดออกได้
	$brush = printer_create_brush(PRINTER_BRUSH_SOLID, "CCCCCC");
	printer_select_brush($handle, $brush);	
	printer_draw_rectangle($handle, 0, 0, dpimm2px(210), dpimm2px(100));
	printer_delete_brush($brush);

	// ส่วนของการพิมพ์ข้อความ รองรับภาษาไทย
	$font = printer_create_font("TH Sarabun New", dpimm2px(7), dpimm2px(2), PRINTER_FW_NORMAL, false, false, false, 0);
	printer_select_font($handle, $font);
	$text = "PHP is simply cool ทดสอบข้อความภาษาไทย";
	$text = iconv("UTF-8","TIS-620",$text);
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(0));
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(8));
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(16));
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(24));	
	$text = "- - - - - - - - - - - - - - - - - - - - - - - -";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(32));	
	$text = "PHP is simply cool ทดสอบข้อความภาษาไทย";
	$text = iconv("UTF-8","TIS-620",$text);
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(40));	
	printer_delete_font($font);

	// ส่วนของการเรียกดูข้อมูลการตั้งค่าการพิมพ์ 
/*	$print_option=array();
	$print_option[] = printer_get_option($handle,PRINTER_RESOLUTION_X);	
	$print_option[] = printer_get_option($handle,PRINTER_RESOLUTION_Y);	
	$print_option[] = printer_get_option($handle,PRINTER_PAPER_FORMAT);	
	echo "<pre>";
	print_r($print_option);
	echo "</pre>";	*/

	printer_end_page($handle);
	printer_end_doc($handle);
	printer_close($handle);
}else{
	echo "Connot connect to: ".$printer;	
}
?>
 
ในโค้ดตัวอย่าง เราจะเห็นส่วนแรกเป็นฟังก์ชั่นในการแปลงค่า ใช้ในการระบุตัวเลข ไม่ว่าจะเป็น
ความกว้าง ความสูงตัวอักษร ตำแหน่งความกว้าง ความยาวของรุปวาด หรือไม่ว่าจะเป็นตำแหน่งในแนว x,y
ของข้อมูลที่จะแสดง เหล่านี้เป็นต้น เราจะใช้ฟังก์ชั่นนี้มาแปลงค่า ทั้งนี้เนื่องจาก เราไม่สามารถใช้ การกำหนด
ความกว้างความสูง หรือค่าของตัวเลขแบบปกติ เนื่องจากค่าจะไม่ตรงกัน เพราะมีส่วนของการการตั้งค่าการพิมพ์
หรือค่า DPI เข้ามาเกี่ยวข้อง โดยถ้าไม่ได้กำหนดว่า ค่าก็จะเป็น 600 DPI
 
<?php
// ฟังก์ชั่นสำหรับ กำหนดค่าของ ตัวเลขที่สัมพันธ์กับ การพิมพ์
// ตัวอย่างเช่น ขนาด 1 cm ในค่า px ที่ DPI ที่ 600 ก็จะเป็น dpimm2px(10);
// หรือ ขนาด 1 cm ในค่า px ที่ DPI 300 ก็จะเป็น dpimm2px(10,300); 
function dpimm2px($val,$dpi=600){
	return ((($dpi*0.393701)/10)*$val);	
}
 
ต่อด้วยโค้ดส่วนของการเช็คการเชื่อมต่อกับ printer
 
$printer =  "Microsoft Print to PDF"; // กำหนดชื่อเครื่องพิมพ์
if($handle = printer_open($printer)){	
//  ทำงานคำสั่ง เมื่อเชื่อมต่อกับ printer สำเร็จ
}else{
	echo "Connot connect to: ".$printer;	
}
 
 
ในส่วนของคำสั่งที่ต้องการ ในตัวอย่างจะประกอบไปด้วย ส่วนของการตั้งค่าการพิมพ์ ไม่วาจะเป็นจำนวน copy
การจัดตำแหน่ง ขนาดของกระดาษ ค่าเหล่านี้สามารถ ดูรายละเอียดเพิ่มเติมที่ ลิ้งค์
 
//  การตั้งค่าการพิมพ์
	printer_set_option($handle, PRINTER_COPIES, 1);
	printer_set_option($handle, PRINTER_MODE, 'text'); // (text, raw or emf)
	printer_set_option($handle, PRINTER_TITLE, 'my first doc');
	printer_set_option($handle, PRINTER_SCALE, 100); // แสดง 100%
	printer_set_option($handle, PRINTER_ORIENTATION, PRINTER_ORIENTATION_PORTRAIT);
	printer_set_option($handle, PRINTER_PAPER_FORMAT, PRINTER_FORMAT_A4);
//	printer_set_option($handle, PRINTER_RESOLUTION_X, 600);
//	printer_set_option($handle, PRINTER_RESOLUTION_Y, 600);		
//	printer_set_option($handle, PRINTER_PAPER_FORMAT, PRINTER_FORMAT_CUSTOM);
//	printer_set_option($handle, PRINTER_PAPER_LENGTH, 150);
//	printer_set_option($handle, PRINTER_PAPER_WIDTH, 550);
//	printer_set_option($handle, PRINTER_BACKGROUND_COLOR, '00FF00');
	printer_set_option($handle, PRINTER_TEXT_ALIGN, PRINTER_TA_LEFT);
//	http://php.net/manual/fa/function.printer-set-option.php // ดูการตั้งค่าต่างๆ ได้ที่ลิ้งค๋นี้
 
 
โดยในการทดสอบ การตั้งค่าให้กับเครื่องพิมพ์แบบเสมือนจะ กำหนดได้แค่บางค่าเท่านั้น แต่ถ้าใช้ในเครื่องพิมพ์
จริง ก็จะกำหนดค่าต่างๆ เพิ่มเติมได้
 
    ต่อไปเป็นส่วนของการกำหนดเอกสารการพิมพ์
 
	printer_start_doc($handle, "My Document"); // กำหนดชื่อเอกสาร ที่จะ print
	printer_start_page($handle);

//	คำสั่งการพิมพ์ข้อความ การจัดรูปแบบ การวาดรูป ต่างๆ

	printer_end_page($handle);
	printer_end_doc($handle);
	printer_close($handle);
 
ในส่วนนี้เราจะกำหนดชื่อของเอกสารที่เราจะสร้างและพิมพ์ 
 
    ต่อด้วยส่วนของโค้ดที่สร้างขอบเขตของพื้นที่ โดยในตัวอย่างเราใช้วิธีการสร้าง รูปสี่เหลี่ยม
พื้นหลังสีเทา 
 
	// ทดสอบสร้างพื้นที่รูปสี่เหลี่ยม เพือไว้อ้างอิงตำแหน่ง เวลาใช้งานจริง ตัดออกได้
	$brush = printer_create_brush(PRINTER_BRUSH_SOLID, "CCCCCC");
	printer_select_brush($handle, $brush);	
	printer_draw_rectangle($handle, 0, 0, dpimm2px(210), dpimm2px(100));
	printer_delete_brush($brush);
 
เริ่มต้นที่ตำแหน่ง x,y ที่ 0,0 และมีขนาดความกว้าง 210 mm สูง 100 mm โดยค่าความกว้างที่เท่ากับ 210
เป็นค่าที่เท่ากับความกว้างของกระดาษ A4  การนำการกำหนดค่าในส่วนนี้ไปประยุกต์ใช้ ก็เช่น สมมติว่าเราต้อง
การพื้นที่่ส่วนของข้อมูลการพิมพ์เป็น กว้าง 10 cm สูง 15 cm เราก็สามารถกำหนดเป็น
 
	printer_draw_rectangle($handle, 0, 0, dpimm2px(100), dpimm2px(150));
 
พอได้พื้นที่ของการพิมพ์แล้ว เราก็สามารถจัดเรียงข้อควมที่ต้องการพิมพ์ในอยู่ในขอบเขตนี้ได้ หลังจัดเรียง
ข้อความได้ในตำแหน่งที่เหมาะสมแล้ว เราก็สามารถปิดการวาดรูปสี่เหลี่ยมไปได้
 
    ต่อมาเป็นส่วนของการเขียนข้อความ โดยในการเขียนข้อความเราต้องกำหนดชื่อ font การตั้งค่า font
เช่นในตัวอย่าง ใช้ font ที่รองรับภาษาไทยชื่อ TH Sarabun New (ใช้ชื่ออื่นๆ เช่น AngsanaUPC ก็ได้)
เรากำหนดความสูงของตัวอักษรเป้น 7 mm กว้าง 2 mm ความหนาขนาดปกติ เป็นต้น ค่าเหล่านี้สามารถ
ดูเพิ่มเติมได้ที่ลิ้งค์
 
	// ส่วนของการพิมพ์ข้อความ รองรับภาษาไทย
	$font = printer_create_font("TH Sarabun New", dpimm2px(7), dpimm2px(2), PRINTER_FW_NORMAL, false, false, false, 0);
	printer_select_font($handle, $font);
	$text = "PHP is simply cool ทดสอบข้อความภาษาไทย";
	$text = iconv("UTF-8","TIS-620",$text);
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(0));
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(8));
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(16));
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(24));	
	$text = "- - - - - - - - - - - - - - - - - - - - - - - -";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(32));	
	$text = "PHP is simply cool ทดสอบข้อความภาษาไทย";
	$text = iconv("UTF-8","TIS-620",$text);
	printer_draw_text($handle, $text, dpimm2px(0), dpimm2px(40));	
	printer_delete_font($font);
 
เนื่องจากเราใช้งานข้อความที่เป็นภาษาไทย จึงจำเป็นต้องทำการแปลงข้อความด้วยคำสั่ง iconv() ตาม
ตัวอย่างในโค้ด เพื่อแปลง UTF-8 ให้เป็น TIS-620 
    จากโค้ดเราให้ข้อความชิดชอบด้านซ้าย โดยกำหนดตำแหน่งของข้อมูลที่ x ให้เท่ากับ 0 mm ส่วน
ตำแหน่งในแนวตั้งหรือที่ y ให้เท่ากับค่า เปลี่ยนแปลงตามสัดส่วนอ้างอิงจากความสูงของ font ที่เรากำหนด
อย่างในตัวอย่าง ข้อความแรกที่ตำแหน่ง y = 0 ข้อความที่สอง ในบรรทัดถัดมา ความสูง จะต้องสูงมากกว่า
หรือเท่ากับความสูงของ font ที่เท่ากับ 7 หรือมากกว่า เพื่อไม่ให้ข้อความซ้อนทับกัน ดังนั้นเราจึงค่าเท่ากับ
เพิ่มที่ละ 8 ในแต่ละบรรทัด จะได้ค่่าเป็น 0,8,16,23 .... ไปเรื่อยๆ ค่าในส่วนนี้ ไม่ตายตัว ขึ้นกับการจัดรูปแบบ
ที่จะต้องสัมพันธ์กับ font ที่เลือกใช้
    สำหรับเครื่องที่มีปัญหาการแสดงข้อความภาษาไทย ให้เข้าไปแก้ไข การตั้งค่าภาษาใน Language for
non-Unicode programs ให้เป็นภาษาไทย ในส่วนของการตั้งค่าของ Windows ตามรูปด้านล่าง
 
 


 
 
จากโค้ดตัวอย่าง จะเห็นว่า ทุกครั้งที่มีการเปลี่ยนข้อความ เราจะทำการแปลงค่าด้วย iconv() เสมอ ทั้งนี้
เพราะถ้าไม่มีการกำหนดค่า ตำแหน่งต่างๆ จะไม่อ้างอิงหรือสัมพันธ์กัน ทำให้การพิมพ์ออกมาไม่ตรง
ตามที่ต้องการ
 
ผลลัพธ์ที่ได้ จากไฟล์ pdf เสมือนพิมพ์ จะเป็นดังรูป
 
 


 
 
ตัวอย่างโค้ดการประยุกต์ ออกใบเสร็จ/ใบกำกับภาษีอย่างย่อ
 
<?php
// ฟังก์ชั่นสำหรับ กำหนดค่าของ ตัวเลขที่สัมพันธ์กับ การพิมพ์
// ตัวอย่างเช่น ขนาด 1 cm ในค่า px ที่ DPI ที่ 600 ก็จะเป็น dpimm2px(10);
// หรือ ขนาด 1 cm ในค่า px ที่ DPI 300 ก็จะเป็น dpimm2px(10,300); 
function dpimm2px($val,$dpi=600){
	return ((($dpi*0.393701)/10)*$val);	
}


$printer =  "Microsoft Print to PDF"; // กำหนดชื่อเครื่องพิมพ์
if($handle = printer_open($printer)){	
//  การตั้งค่าการพิมพ์
	printer_set_option($handle, PRINTER_COPIES, 1);
	printer_set_option($handle, PRINTER_MODE, 'text'); // (text, raw or emf)
	printer_set_option($handle, PRINTER_TITLE, 'my first doc');
	printer_set_option($handle, PRINTER_SCALE, 100); // แสดง 100%
	printer_set_option($handle, PRINTER_ORIENTATION, PRINTER_ORIENTATION_PORTRAIT);
	printer_set_option($handle, PRINTER_PAPER_FORMAT, PRINTER_FORMAT_A4);
//	printer_set_option($handle, PRINTER_RESOLUTION_X, 600);
//	printer_set_option($handle, PRINTER_RESOLUTION_Y, 600);		
//	printer_set_option($handle, PRINTER_PAPER_FORMAT, PRINTER_FORMAT_CUSTOM);
//	printer_set_option($handle, PRINTER_PAPER_LENGTH, 150);
//	printer_set_option($handle, PRINTER_PAPER_WIDTH, 550);
//	printer_set_option($handle, PRINTER_BACKGROUND_COLOR, '00FF00');
	printer_set_option($handle, PRINTER_TEXT_ALIGN, PRINTER_TA_LEFT);
//	http://php.net/manual/fa/function.printer-set-option.php // ดูการตั้งค่าต่างๆ ได้ที่ลิ้งค๋นี้

	printer_start_doc($handle, "My Document"); // กำหนดชื่อเอกสาร ที่จะ print
	printer_start_page($handle);

	// ทดสอบสร้างพื้นที่รูปสี่เหลี่ยม เพือไว้อ้างอิงตำแหน่ง เวลาใช้งานจริง ตัดออกได้
	$brush = printer_create_brush(PRINTER_BRUSH_SOLID, "CCCCCC");
	printer_select_brush($handle, $brush);	
	printer_draw_rectangle($handle, 0, 0, dpimm2px(55), dpimm2px(100));
	printer_delete_brush($brush);

	// ส่วนของการพิมพ์ข้อความ รองรับภาษาไทย
	$font = printer_create_font("Tahoma", dpimm2px(3), dpimm2px(1), PRINTER_FW_NORMAL, false, false, false, 0);
	printer_select_font($handle, $font);
	$text = "WWW.NINENIK.COM";
	$text = iconv("UTF-8","TIS-620",$text);
	printer_draw_text($handle, $text, dpimm2px(15), dpimm2px(7));
	$text = "TAX 0000000000000 (VAT Included)";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(10), dpimm2px(11));
	$text = "ใบเสร็จรับเงิน/ใบกำกับภาษีอย่างย่อ";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(10), dpimm2px(19));	
	
	$y_start = 24;
	$y_end = 0;
	for($i=1;$i<=5;$i++){
		$y_pos = $y_start+(($i-1)*4);
		$text = $i.". สินค้ารายการที่ $i";
		$text = iconv("UTF-8","TIS-620",$text);	
		printer_draw_text($handle, $text, dpimm2px(3), dpimm2px($y_pos));		
		$text = number_format($i*10,2);
		$text = iconv("UTF-8","TIS-620",$text);	
		printer_draw_text($handle, $text, dpimm2px(40), dpimm2px($y_pos));		
		$y_end = $y_pos;		
	}
	
	$y_end+=6;
	$y_pos = $y_end;
	$text = "Total";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(3), dpimm2px($y_pos));		
	$text = "(15)";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(15), dpimm2px($y_pos));		
	$text = number_format(150,2);
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(25), dpimm2px($y_pos));			
	
	$y_end+=4;
	$y_pos = $y_end;
	$text = "Cash/Change";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(3), dpimm2px($y_pos));		
	$text = number_format(500,2);
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(25), dpimm2px($y_pos));		
	$text = number_format(350,2);
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(40), dpimm2px($y_pos));		

	$y_end+=4;
	$y_pos = $y_end;
	$text = "R0000000000";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(3), dpimm2px($y_pos));		
	$text = date("H:i d/m/Y");
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(30), dpimm2px($y_pos));					
	
	$y_end+=4;
	$y_pos = $y_end;
	$text = "** ศูณย์ลูกค้าสัมพันธ์ 0-0000-0000 **";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(10), dpimm2px($y_pos));				

	$y_end = $y_end+4;
	$y_pos = $y_end;	
	$text = "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -";
	$text = iconv("UTF-8","TIS-620",$text);	
	printer_draw_text($handle, $text, dpimm2px(3), dpimm2px($y_pos));		
		

	printer_delete_font($font);

	printer_end_page($handle);
	printer_end_doc($handle);
	printer_close($handle);
}else{
	echo "Connot connect to: ".$printer;	
}
?>
 
รูปผลลัพธ์ทีได้ ก่อนและหลังนำพื้นกรอบสี่เหลี่ยมออก
 
 


 
 
จะเห็นว่าเราสามารถนำไปประยุกต์กับการพิมพ์บน เครื่องพิมพ์ใบเสร็จ สลิป กระดาษใบเสร็จ เครื่อง POS 
เหล่านี้เป็นต้น
    หวังว่าเนื้อหานี้ จะเป็นแนวทางในการนำไปประยุกต์ใช้งาน ได้ไม่มากก็น้อย ถึงแม้ว่าความสามารถในการ
จัดการจะมีไม่มาก แต่ก็เพียงพอสำหรับบางระบบงาน และการนำไปประยุกต์ใช้
 
 


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ








เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน เพื่ออ่านเนื้อหาบทความ

ยังไม่เป็นสมาชิก

สมาชิกล็อกอิน



( หรือ เข้าใช้งานผ่าน Social Login )




URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ