Oct. 09
29

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

วันนี้มาถึงคำสั่งสุดท้ายในซีรี่ พิมพ์ข้อความลงในเอกสาร ของ 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 บทที่ 5 การกำหนดกั้นหน้ากระดาษ
  2. FPDF บทที่ 11 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง text
  3. FPDF บทที่ 12 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง write
  4. FPDF บทที่ 13 พิมพ์ข้อความลงไปในเอกสารด้วยคำสั่ง Cell
  5. FPDF บทที่ 16 การใส่ลิ้งก์
This entry was posted in FPDF and tagged . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

27 Comments

  1. minddezign Firefox 3.5.3 Windows XP
    Posted 29/10/2009 at 08:31 | Permalink

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

  2. Posted 24/05/2010 at 09:06 | Permalink

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

  3. administrator Firefox 3.6.3 Windows XP
    Posted 24/05/2010 at 09:11 | Permalink

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

  4. Posted 24/05/2010 at 09:15 | Permalink

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

  5. Posted 24/05/2010 at 09:18 | Permalink

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

  6. administrator Firefox 3.6.3 Windows XP
    Posted 24/05/2010 at 09:40 | Permalink

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

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

  7. administrator Firefox 3.6.3 Windows XP
    Posted 24/05/2010 at 10:14 | Permalink

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

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

  8. ณัฐ MSIE 8.0 Windows XP
    Posted 12/07/2010 at 11:24 | Permalink

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

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

  9. administrator Firefox 3.6.6 Windows XP
    Posted 12/07/2010 at 11:37 | Permalink

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

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

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

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

  10. Posted 12/07/2010 at 11:44 | Permalink

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

  11. ณัฐ MSIE 8.0 Windows XP
    Posted 12/07/2010 at 13:21 | Permalink

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

  12. ณัฐ MSIE 8.0 Windows XP
    Posted 13/07/2010 at 13:31 | Permalink

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

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

  13. ณัฐ MSIE 8.0 Windows XP
    Posted 14/07/2010 at 11:20 | Permalink

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

  14. nut MSIE 7.0 Windows XP
    Posted 20/07/2010 at 10:43 | Permalink

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

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

  15. มาเร็ว Firefox 3.6.10 Windows 7
    Posted 09/10/2010 at 16:31 | Permalink

    พอจะมีคำแนะนำสำหรับการเว้นขนาดมั๊ยครับ
    ตอนนี้ผมสั่งให้มันรับค่าตัวแปรมา แล้วสั่งให้มันนับว่ามีกี่อักขระ
    เอานำจำนวนที่ได้มาเป็นขนาดของช่อง cell อ่ะครับ
    แต่มันมีปัญหาตรงที่ว่า ถ้าหากข้อความมีสระบนล่างมากๆ ช่องมันจะห่างเรื่อยๆ
    จนบางทีมันก็ไม่สวยไปเลยน่ะครับ อยากให้แนะนำวิธีให้หน่อย

  16. น้องใหม่ Firefox 3.6.12 Windows XP
    Posted 22/11/2010 at 23:49 | Permalink

    ผมทำแล้ว มันตัดลงมาบรรทัดใหม่ ต้องทำยังไงม่ให้มันขึ้นบรรทัดใหม่อ่ะครับ ขอบคุณครับ
    $pdf->MultiCell(20,5,$rowsitems['DecDesc3'],0,’L');

    $pdf->MultiCell(10,5,$rowsitems['DecDesc4'],0,’L');

    Cell แรกจะปกติ แต่พอ Cell ถัดมามันตัดลงมาคนละบรรทัดครับ

    • administrator Firefox 3.6.12 Windows 7
      Posted 23/11/2010 at 12:40 | Permalink

      กำหนดความกว้างของ MultiCell ให้มากขึ้นครับ คำสั่งนี้ถ้าตัวหนังสือที่ต้องการให้พิมพ์มากกว่าความกว้าง มันจะตัดขึ้นบรรทัดใหม่ให้อัตโนมัติ

  17. น้องใหม่ Firefox 3.6.12 Windows XP
    Posted 24/11/2010 at 23:58 | Permalink

    Row1 : 001 TEST DATA OVER ข้อมูลน้อย ข้อมูล1
    Multicell Can’t
    Repeat other row
    ——————————————————
    Row2 : 002 ข้อมูลน้อยลง ข้อมูลน้อย ข้อมูล2
    ——————————————————
    Row3 : 003 ข้อมูลมีมากขึ้นอีกแล้ว ข้อมูลน้อย ข้อมูล3
    ทำยังไงไม่ให้ตัดบรรทัด
    ใหม่
    ——————————————————
    ตัวอย่างข้อมูลครับ ควรใช้คำสั่งไงดีครับถึงจะได้ Output เป็นแบบนี้ครับ ขอบคุณอีกครั้งครับ มีคำสั่งอื่นที่แทน Multicell หรือเปล่าครับ

    • น้องใหม่ Firefox 3.6.12 Windows XP
      Posted 25/11/2010 at 00:02 | Permalink

      Row1 : 001 TEST DATA OVER ข้อมูลน้อย ข้อมูล1
      …………….Multicell Can’t
      …………….Repeat other row
      ——————————————————
      Row2 : 002 ข้อมูลน้อยลง ข้อมูลน้อย ข้อมูล2
      ——————————————————
      Row3 : 003 ข้อมูลมีมากขึ้นอีกแล้ว ข้อมูลน้อย ข้อมูล3
      …………….ทำยังไงไม่ให้ตัดบรรทัด
      …………….ใหม่
      ——————————————————
      ตัวอย่างข้อมูลครับ ควรใช้คำสั่งไงดีครับถึงจะได้ Output เป็นแบบนี้ครับ
      ข้อมูลจะแสดงที่ละแถวแบบนี้ไปเรื่อยๆ ครับ (จุด… พิมพ์ไว้ให้ Colum ตรงกันนะครับไม่เกี่ยวกับ Output)
      ขอบคุณอีกครั้งครับ มีคำสั่งอื่นที่แทน Multicell หรือเปล่าครับ

  18. น้องใหม่ Firefox 3.6.12 Windows XP
    Posted 25/11/2010 at 00:14 | Permalink

    Row1 : | 001 | ทดสอบ Multicell | ข้อมูลน้อย1 | ข้อมูล1 |
    ………….|Muticell ตัดบรรทัด |
    ………….|ทำให้ข้อมูลอื่นหล่นลงมา |
    ——————————————————–
    Row2 : | 002 | ข้อมูลน้อยลง | ข้อมูลน้อย2 | ข้อมูล2|
    ——————————————————–
    Row3 : | 003 | ข้อมูลมีมากขึ้นอีกแล้ว | ข้อมูลน้อย3 | ข้อมูล3|
    ………….|ทำยังไงไม่ให้ตัดบรรทัด |
    ………….|ใหม่ |
    ——————————————————–
    ผมกลัวไม่เข้าใจครับ มันจัดได้ไม่สวย คือข้อมูลจะเรียง colum ไปทางขวาจนหมด
    ทุก Colum ถึงจะขึ้นบรรทัดใหม่ครับ
    ขออภัยที่โพสบ่อยครับ
    ขอบคุณมากนะครับ

  19. administrator Firefox 3.6.12 Windows XP
    Posted 25/11/2010 at 07:58 | Permalink

    ลองอ่านบทความนี้ครับ เผื่อจะแก้ปัญหาของท่านได้

    http://www.select2web.com/fpdf/fpdf-lesson-11.html

  20. administrator Firefox 3.6.12 Windows XP
    Posted 25/11/2010 at 08:00 | Permalink

    คำสั่งสำหรับพิมพ์ข้อความลงในเอกสาร pdf ของ fpdf มีอยู่ 4 คำสั่ง Text , Write , Cell , MultiCell

    ลองเลือกดูว่าคำสั่งไหนเหมาะกับงานของตัว

    ผมได้เขียนบทความเรื่อง fpdf ไว้ทั้งหมด 15 บทความสามารถอ่านได้ที่นี่

    http://www.select2web.com/category/fpdf

  21. Posted 23/12/2010 at 12:18 | Permalink

    พี่ครับตาราง multcell มันไม่เรียงต่อไปอะครับ มันเรียงลงมามีวิธีทำให้เหมือน cell ไหมครับ

  22. susam07 MSIE 8.0 Windows XP
    Posted 09/03/2011 at 11:26 | Permalink

    อยากทราบว่า..ถ้าต้องการให้ออกมาในรูปแบบลักษณะอย่างนี้…ต้องใช้คำสั่งอะไรนะคะ multi columns หรือ multicell หรืออะไรคะ

    รายรับ รายจ่าย
    เงินเดือน 8992.50 ประกันสังคม 425.00
    เงินประจำตำแหน่ง 1000.00 ภาษี 665.25
    ปฎิบัติงาน 1800.00 ประกันชีวิต 1100.00

    รับสุทธิ xxxxx.xx บาท

    หากพบปัญหา กรุณาตรวจสอบรายละเอียดที่ห้องการเงินทันที

  23. susam07 MSIE 8.0 Windows XP
    Posted 09/03/2011 at 11:27 | Permalink

    แบ่งเป็นคนละฟากคะ…ที่โพสข้างบนออกมาไม่ตรงกั่บที่พิมพ์text boxในช่องนี้อ่ะ

  24. Posted 25/08/2011 at 00:07 | Permalink

    เวลาโพสข้อความลงในหน้ากระดานพอรันออกมาแล้้วขึ้นบรรทัดเดียวอยากให้ขึ้นบรรทัดใหม่โดยอัติโนมัติ บางข้อความยาวเกินไปทำไงดี บอกด้วยค่ะ Dream cs4 ขอบคุณค่ะ

  25. แก้ว Firefox 8.0 Windows XP
    Posted 10/01/2012 at 13:57 | Permalink

    อยากถามว่าเมื่อเราเขียน File PDF แล้วเราจะเช็คค่าได้อย่างไรว่า User สั่งพิมพ์กี่ครั้ง.

Post a Comment

You must be logged in to post a comment.