FPDF บทที่ 14 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง MultiCell

วันนี้มาถึงคำสั่งสุดท้ายในซีรี่ พิมพ์ข้อความลงในเอกสาร ของ fpdf เมื่อผมเริ่มซีรี่ด้วยคำสั่ง Text ซึ่งเป็นคำสั่งที่ง่ายๆที่สุดในบรรดา สี่พี่น้อง แล้วก็ตามมาด้วยคำสั่ง Write ซับซ้อนและมากความสามารถขึ้นมาอีกนิดนึง จนเมื่อวันก่อนลงเอยคำสั่ง Cell ซับซ้อนกว่าคำสั่ง Write อีก สามารถตีเส้นกรอบ และทำอย่างอื่นได้อีกหลายอย่าง แต่ดังที่ผมพูดไว้ในบทว่าด้วยเรื่อง Cell ว่าคำสั่งนี้จะไม่ปัดบรรทัดให้อัตโนมัติ เมื่อตัวอักษรยาวกว่ากรอบที่กำหนด
และแล้ววันที่โลกทั้งโลกรอคอยก็มาถึง ทูเดย์ ไอจะแนะนำวิธีการใช้งานคำสั่ง MultiCell ที่ทั้งพารามิเตอร์และการใช้งานเหมือนกันกับคำสั่ง Cell แต่เพิ่มความสามารถตัดขึ้นบรรทัดใหม่ให้ด้วย เมื่อความยาวของข้อความที่อยู่ในกรอบ ยาวเกินความกว้าง
มาดูกัน เหยาะซ้อส (source) ก่อนเป็นอันดับแรก แล้วค่อยเอาผักใส่ตามหลัง
<?php define('FPDF_FONTPATH','font/'); require('fpdf.php'); $pdf=new FPDF(); // เพิ่มฟ้อนต์ภาษาไทยเข้ามา ตัวธรรมดา กำหนด ชื่อ เป็น angsana $pdf->AddFont('angsana','','angsa.php'); //สร้างหน้าเอกสาร $pdf->AddPage(); // กำหนดฟ้อนต์ที่จะใช้ อังสนา ตัวธรรมดา ขนาด 14 $pdf->SetFont('angsana','',14); // พิมพ์ข้อความลงเอกสาร มีกรอบด้วย $pdf->MultiCell( 20 , 5 , iconv( 'UTF-8','cp874' , 'นี่คือข้อความที่ตั้งใจให้ยาวเลยความกว้างของกรอบเซลล์' ) ); $pdf->Output(); ?>
MultiCell(float w, float h, string txt [, mixed border [, string align [, boolean fill]]])
คำอธิบาย
สำหรับพิมพ์ข้อความลงในเอกสาร pdf
พารามิเตอร์
w : (ตัวเลข) ความกว้างของกล่องข้อความ ถ้าระบุเป็น 0 กล่องจะกว้างไปจนถึงกั้นขวาของกระดาษ
h : (ตัวเลข) ความสูงของกล่องข้อความ
txt : (ตัวหนังสือ) ข้อความที่ต้องการพิมพ์
border : เส้นขอบของกล่องข้อความ
- ค่าที่เป็นไปได้
- 0 : ไม่มีขอบ (default)
- 1 : มีขอบ
- นอกจากเป็น 0 1 แล้วเรายังระบุได้ด้วยว่าเอาเฉพาะกรอบด้านไหนได้ด้วย
- L: ขอบซ้าย
- T: ขอบบน
- R: ขอบขวา
- B: ขอบล่าง
align : (ตัวหนังสือ) จัดเรียงข้อความภายในกล่อง
- ค่าที่เป็นไปได้
- L or ค่าว่าง : ชิดซ้าย (default value)
- C: จัดกึ่งกลาง
- R: ชิดขวา
fill : (true/false) แรเงากล่องข้อความหรือไม่หรือไม่ สำหรับสีที่จะใช้ในการแรเงานั้นกำหนดได้ด้วยคำสั่ง SetFillColor ซึ่งจะอธิบายในบทต่อๆ ไป
- ค่าที่เป็นไปได้
- false : ไม่แรเงา (default)
- true : แรเงา
บทความน่าสนใจ
- FPDF บทที่ 13 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง Cell
- FPDF บทที่ 11 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง text
- FPDF บทที่ 12 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง write
- FPDF บทที่ 5 การกำหนดกั้นหน้ากระดาษ
- FPDF บทที่ 9 การกำหนดคุณสมบัติของเอกสาร
ผู้เขียน: วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย
เว็บไซต์ :http://www.select2web.com
งานเล็กๆก็ยิ่งใหญ่ได้ ถ้าอยู่ในที่ๆเหมาะสม
มี 14 ความเห็น ในบทความเรื่อง “FPDF บทที่ 14 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง MultiCell”
แสดงความเห็น
Categories
- 1 week 1 Source (2)
- AppServ (10)
- Array (2)
- Codeigniter (1)
- Computer (7)
- CSS (9)
- Dreamweaver (7)
- Firefox (7)
- Form (2)
- FPDF (15)
- General (31)
- HTML (2)
- Javascript (6)
- jQuery (86)
- Mac (10)
- MySQL (15)
- Navicat (9)
- Other (58)
- PHP (97)
- PHP-function (12)
- Program (8)
- SMF (15)
- SQL (20)
- Theme (1)
- TinyMCE (7)
- webservice (1)
- Wordpress (18)
- คอมฯ ทั่วไป (6)
-
Recent Posts
- akismet ปลักอินกรองแสปมของเวิร์ดเพรส
- WP-CMS Post Control ปลักอินสำหรับซ่อนสิ่งที่ไม่ต้องการในเวิร์ดเพรส
- wordpress flickr manager ปลักอินสำหรับอัปโหลดภาพเก็บที่ flickr
- picpick โปรแกรมที่เว็บโปรแกรมเมอร์ต้องมีไว้ติดเครื่อง
- ขอความเห็น
- todoist โปรแกรมจดรายการสิ่งที่ต้องทำสุดเจ๋ง
- wordpress google xml sitemap หนึ่งในปลักอินที่ท่านต้องติดตั้ง
- แนะนำเว็บให้ความรู้การเขียนโปรแกรมโคตะระเด็ด
- โปรแกรมจดรายการสิ่งที่จะต้องทำ
- แจกภาพปุ่มเอาไปตกแต่งเว็บ
- วิธีสร้างเว็บให้ติดอันดับหนึ่ง
- wordpress ปิงผู้ปิดทองหลังพระ
- วิธีเปิด notepad อย่างรวดเร็ว
- วิธีดึงข้อมูลออกจากฐานข้อมูลของเวิร์ดเพรส แบบสุ่ม
- หารายละเอียดโดเมน
Tags
AppServ Array Back to the basic bug calendar CAPTCHA chart CSS Dreamveawer eclipse error firebug Firefox firefox plugin FPDF General google helios HTML icons Javascript jQuery jquery plugin jquery slide jQuery tutorial jQuery UI Mac MySQL Other pdt PHP phpmailer programming slide slide show SMF smf themes smf themes download smf themes free smf themes thai SQL sql function tooltip Wordpress wordpress plugin
อ๋อเป็นเช่นนี้นี่เองครับ ผมเองใช้ Add on อยู่ตั้งนานครับ
ไม่มีวิธีแก้วรรณยุกต์ลอย หรือครับผมหามาทุกเว็บเลยไม่มีใครกล้าวถึงสักคน
ผมใช้อยู่ไม่เคยเจอปัญหาอย่างที่คุณบุญถึงบอกเลยนะครับ ไม่ทราบว่าใช้ฟ้อนต์อะไร อาจจะเป็นที่ฟ้อนต์ที่ใช้
ผม ใช้ AngsanaNew ครับ ผมเห็นในตัวอย่างที่ใช้ class fpdf แล้วทำเป็นภาษาไทยทุกตัวอย่างวรรณยุกต์ลอยหมดไม่เห็นมีใครทำตัวอย่างที่ไม่ลอยเลยครับ ช่วยหน่อยนะครับ ขอโค้ด หรือ ฟร้อนที่คุณว่าก็ได้
แม้แต่ตัวอย่างของเว็บหน้านี้ยังลอยเลย
ผมย้อนกลับไปดูผลงานที่ผมทำใช้งานใบบริษัท มันลอยจริงๆด้วย ไม่เกี่ยวกับฟ้อนต์แล้วงั้น ผมก็ไม่เคยสังเกตมัน ทั้งที่ใช้อยู่ทุกวัน
เดี๋ยวผมจะหาวิธีให้ครับคุณบุญถึง
ผมลองหาดูในกูเกิล เจอลิ้งก์นี้ http://www.worldphp.com/newsdetail.php?xx=CjRUMg==&tpe=&types=DTdWMw== ท่านลองสมัครสมาชิกแล้วดาวน์โหลดโค้ดของเขามาใช้ครับ เขาแก้สระลอยไว้เรียบร้อยแล้ว
ผมได้ลองดาวน์โหลดมาทดสอบดูแล้ว มันไม่ลอยจริงๆ
ขอคำแนะนำในการย่อหรือขยายขนาดตัวอักษร ตามขนาดของเซลหน่อยครับ
เนื่องจากมีข้อจำกัดเรื่องการดึงข้อมูลจากฐานข้อมูล
ลงมาพิมพ์ในแบบฟอร์ม Certificate
แต่แบบฟอร์มมีขอบเขตจำกัด ตัวหนังสือขนาดใหญ่ที่สุด
จะเป็นขนาด Arial’,'B’,16
แต่บางข้อมูลมีตัวอักษรยาวเกินไป มีวิธีเทรียบสูตรเป็น %
หาขนาดตัวอักษรที่ไม่เกินระยะ หรือมีฟังก์ชั่นอะไรช่วยไหมครับ
เพื่อให้ลดขนาดตัวอักษรลงอัตโนมัติ
อย่างอื่นผมใช้งานได้ดีและมีประโยชน์มากๆ เลยครับ
ขอบคุณผู้ที่คิดค้นและนำมาเผยแพร่อย่างมากครับ
ตัว FPDF มีคำสั่งในการหาความยาวของข้อความ คือ http://www.fpdf.org/en/doc/getstringwidth.htm
หลังจากได้ความยาวของข้อความแล้ว เราก็เอามาเข้าเงื่อนไขครับ ถ้าสั้นกว่าเท่านี้ กำหนดขนาดฟ้อนต์เท่านี้ ถ้ายาวตั้งแต่เท่านี้ถึงเท่านี้กำหนดฟ้อนต์ขนาดเท่านี้ ถ้ายาวมากกว่าเท่านี้ ตัดข้อความใ่ห้เหลือเท่านี้แล้วกำหนดขนาดฟ้อนต์เท่านี้
ใช้คำสั่ง switch เป็นตัวจัดการเงื่อนไขก็ได้ครับ หรือจะใช้ if ก็แล้วแต่ถนัด
คำสั่งสำหรับตัดข้อความอ่านได้ที่นี่ครับ สะดุ้งดอทคอม http://www.sadung.com/?p=122
ถ้าเป็นตัวอักษรภาษาอังกฤษเราคงประมาณได้ว่า 1 cell แสดงได้กี่ตัวอักษรโดยใช้ค่ำสั่ง strlen แต่ภาษาไทย มีสระ-วรรณยุกต์เลยยังไม่เคยลอง ถ้าให้ทำจิง ๆ คงต้องมาเขียน function นับว่าถ้าใช้ฟร้อนขนาดเนี่ย แล้วก็ พายัญชนะ แต่ละตัวมีความกว้างกี่ พิกเซล สระไหน กว้างกี่พิกเซล แน่นอนวรรณยุกต์ย่อมไม่มีความกว้าง หรือง่าย สุดเขียน function ตัดพวก วรรณยุกต๋ออก แล้วนับดูว่ามีกี่ตัวเพื่อจะประมาณได้ว่า 1 cell ของเราที่จะแสดงผล สามารถรับได้กี่ตัว
ขอบคุณมากนะครับ
แต่ถ้าได้สักตัวอย่างหนึ่งก้จะลดเวลาในการลองผิดลองถูกไปเยอะเลยครับ
ผมไม่ใช่โปรแกรมเมอร์อ่ะครับ
แค่อ่าน php แล้วทำเว็ปมาถึงตรงนี้เท่านั้นอ่ะครับ
บางทีเรื่องตัวแปรยังไม่ค่อยรู้อะไรเป้นอะไรนักครับ
แค่คลำทางลองผิดถูกไปครับ
ขอบคุณครับ
รบกวนขอตัวอย่าง GetStringWidth
หน่อยครับ พอดีทดสอบแล้ว
$space = $pdf->GetStringWidth(‘XXXXXX’);
ผลคือ $space =0
ลองใช้ strlen($XXXXX) ของ php แล้ว ก็ติดที่ตัวอักษรกว้างไม่เท่ากันครับ
รบกวนหน่อยนะครับ
ขอบคุณครับ
แฮะๆ ได้ละครับขอบคุณมากๆครับ ที่ช่วยชี้แนะ ผมชุ่ยเองละครับ
ขอบคุณทุกๆ ท่านครับ
คุณ platoosom says:
24/05/2010 at 10:14
ความคิดเห็นที่ 7
มันมี bug น่ะครับ เช่น Text() ไม่ support
และ cell แสดงคำเหล่านี้ไม่ได้ เช่น น้ำ สิทธิ์ เป้นต้น