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

October 2009 | By platoosom | FPDF | Tags : | อ่าน : 1165

วันนี้มาถึงคำสั่งสุดท้ายในซีรี่ พิมพ์ข้อความลงในเอกสาร ของ fpdf เมื่อผมเริ่มซีรี่ด้วยคำสั่ง Text ซึ่งเป็นคำสั่งที่ง่ายๆที่สุดในบรรดา สี่พี่น้อง แล้วก็ตามมาด้วยคำสั่ง Write ซับซ้อนและมากความสามารถขึ้นมาอีกนิดนึง จนเมื่อวันก่อนลงเอยคำสั่ง Cell ซับซ้อนกว่าคำสั่ง Write อีก สามารถตีเส้นกรอบ และทำอย่างอื่นได้อีกหลายอย่าง แต่ดังที่ผมพูดไว้ในบทว่าด้วยเรื่อง Cell ว่าคำสั่งนี้จะไม่ปัดบรรทัดให้อัตโนมัติ เมื่อตัวอักษรยาวกว่ากรอบที่กำหนด

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

มาดูกัน เหยาะซ้อส (source) ก่อนเป็นอันดับแรก แล้วค่อยเอาผักใส่ตามหลัง

Live Demo

<?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 : แรเงา

บทความน่าสนใจ

  1. FPDF บทที่ 13 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง Cell
  2. FPDF บทที่ 11 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง text
  3. FPDF บทที่ 12 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง write
  4. FPDF บทที่ 5 การกำหนดกั้นหน้ากระดาษ
  5. FPDF บทที่ 9 การกำหนดคุณสมบัติของเอกสาร
Tags:

ผู้เขียน: วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย

เว็บไซต์ :http://www.select2web.com

งานเล็กๆก็ยิ่งใหญ่ได้ ถ้าอยู่ในที่ๆเหมาะสม

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

  1. minddezign says:

    อ๋อเป็นเช่นนี้นี่เองครับ ผมเองใช้ Add on อยู่ตั้งนานครับ

  2. ไม่มีวิธีแก้วรรณยุกต์ลอย หรือครับผมหามาทุกเว็บเลยไม่มีใครกล้าวถึงสักคน

  3. platoosom says:

    ผมใช้อยู่ไม่เคยเจอปัญหาอย่างที่คุณบุญถึงบอกเลยนะครับ ไม่ทราบว่าใช้ฟ้อนต์อะไร อาจจะเป็นที่ฟ้อนต์ที่ใช้

  4. ผม ใช้ AngsanaNew ครับ ผมเห็นในตัวอย่างที่ใช้ class fpdf แล้วทำเป็นภาษาไทยทุกตัวอย่างวรรณยุกต์ลอยหมดไม่เห็นมีใครทำตัวอย่างที่ไม่ลอยเลยครับ ช่วยหน่อยนะครับ ขอโค้ด หรือ ฟร้อนที่คุณว่าก็ได้

  5. แม้แต่ตัวอย่างของเว็บหน้านี้ยังลอยเลย

  6. platoosom says:

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

    เดี๋ยวผมจะหาวิธีให้ครับคุณบุญถึง

  7. platoosom says:

    ผมลองหาดูในกูเกิล เจอลิ้งก์นี้ http://www.worldphp.com/newsdetail.php?xx=CjRUMg==&tpe=&types=DTdWMw== ท่านลองสมัครสมาชิกแล้วดาวน์โหลดโค้ดของเขามาใช้ครับ เขาแก้สระลอยไว้เรียบร้อยแล้ว

    ผมได้ลองดาวน์โหลดมาทดสอบดูแล้ว มันไม่ลอยจริงๆ

  8. ณัฐ says:

    ขอคำแนะนำในการย่อหรือขยายขนาดตัวอักษร ตามขนาดของเซลหน่อยครับ
    เนื่องจากมีข้อจำกัดเรื่องการดึงข้อมูลจากฐานข้อมูล
    ลงมาพิมพ์ในแบบฟอร์ม Certificate
    แต่แบบฟอร์มมีขอบเขตจำกัด ตัวหนังสือขนาดใหญ่ที่สุด
    จะเป็นขนาด Arial’,'B’,16
    แต่บางข้อมูลมีตัวอักษรยาวเกินไป มีวิธีเทรียบสูตรเป็น %
    หาขนาดตัวอักษรที่ไม่เกินระยะ หรือมีฟังก์ชั่นอะไรช่วยไหมครับ
    เพื่อให้ลดขนาดตัวอักษรลงอัตโนมัติ

    อย่างอื่นผมใช้งานได้ดีและมีประโยชน์มากๆ เลยครับ
    ขอบคุณผู้ที่คิดค้นและนำมาเผยแพร่อย่างมากครับ

  9. platoosom says:

    ตัว FPDF มีคำสั่งในการหาความยาวของข้อความ คือ http://www.fpdf.org/en/doc/getstringwidth.htm

    หลังจากได้ความยาวของข้อความแล้ว เราก็เอามาเข้าเงื่อนไขครับ ถ้าสั้นกว่าเท่านี้ กำหนดขนาดฟ้อนต์เท่านี้ ถ้ายาวตั้งแต่เท่านี้ถึงเท่านี้กำหนดฟ้อนต์ขนาดเท่านี้ ถ้ายาวมากกว่าเท่านี้ ตัดข้อความใ่ห้เหลือเท่านี้แล้วกำหนดขนาดฟ้อนต์เท่านี้

    ใช้คำสั่ง switch เป็นตัวจัดการเงื่อนไขก็ได้ครับ หรือจะใช้ if ก็แล้วแต่ถนัด

    คำสั่งสำหรับตัดข้อความอ่านได้ที่นี่ครับ สะดุ้งดอทคอม http://www.sadung.com/?p=122

  10. ถ้าเป็นตัวอักษรภาษาอังกฤษเราคงประมาณได้ว่า 1 cell แสดงได้กี่ตัวอักษรโดยใช้ค่ำสั่ง strlen แต่ภาษาไทย มีสระ-วรรณยุกต์เลยยังไม่เคยลอง ถ้าให้ทำจิง ๆ คงต้องมาเขียน function นับว่าถ้าใช้ฟร้อนขนาดเนี่ย แล้วก็ พายัญชนะ แต่ละตัวมีความกว้างกี่ พิกเซล สระไหน กว้างกี่พิกเซล แน่นอนวรรณยุกต์ย่อมไม่มีความกว้าง หรือง่าย สุดเขียน function ตัดพวก วรรณยุกต๋ออก แล้วนับดูว่ามีกี่ตัวเพื่อจะประมาณได้ว่า 1 cell ของเราที่จะแสดงผล สามารถรับได้กี่ตัว

  11. ณัฐ says:

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

  12. ณัฐ says:

    รบกวนขอตัวอย่าง GetStringWidth
    หน่อยครับ พอดีทดสอบแล้ว
    $space = $pdf->GetStringWidth(‘XXXXXX’);
    ผลคือ $space =0

    ลองใช้ strlen($XXXXX) ของ php แล้ว ก็ติดที่ตัวอักษรกว้างไม่เท่ากันครับ
    รบกวนหน่อยนะครับ
    ขอบคุณครับ

  13. ณัฐ says:

    แฮะๆ ได้ละครับขอบคุณมากๆครับ ที่ช่วยชี้แนะ ผมชุ่ยเองละครับ
    ขอบคุณทุกๆ ท่านครับ

  14. nut says:

    คุณ platoosom says:
    24/05/2010 at 10:14
    ความคิดเห็นที่ 7

    มันมี bug น่ะครับ เช่น Text() ไม่ support
    และ cell แสดงคำเหล่านี้ไม่ได้ เช่น น้ำ สิทธิ์ เป้นต้น

แสดงความเห็น

ชื่อ *
Email *
Website
ความคิดเห็น