การใช้ PHP เขียนข้อมูลสร้าง PDF File

fpdf module with multicell
fpdf module with multicell

30 มิ.ย.56 มีโอกาสดู 2 เรื่อง สำหรับเรื่องแรก คือ cygwin กับ freebasic ที่ดูมาแล้วหลายวัน วันนี้สรุปว่า freebasic ยังทำงานบนสภาวะจำลอง linux ได้ไม่ดีนัก แต่เป้าหมายคือการทดสอบบน cygwin จึงเปลี่ยนไปใช้ open-cobol ก็พบว่าทำงานเข้ากันได้กับ cygwin ตั้งแต่ปรับแก้คำสั่งใน compiler แล้วก็แปล sourcecode ใหม่ด้วย gcc แล้วได้ compiler จากนั้นก็เขียนภาษา cobol นำมาแปลด้วย compiler ตัวใหม่ที่ปรับแก้คำสั่งแล้ว สรุปว่าเรียบร้อยดี

ส่วนเรื่องที่สอง เรื่องการใช้ php อ่านข้อมูลไปเขียนลง PDF file เพื่อ download ไปใช้งาน
โจทย์ที่ทราบมาจาก ภสุ (นักศึกษาที่ทำโปรเจค) คือต้องการเขียนข้อมูลฟิลด์เดียว แต่มีหลายบรรทัดลงแฟ้ม pdf แต่ฟังก์ชัน cell จะทำให้ข้อมูล 1 ฟิลด์ไหลไปเรื่อย ๆ จนทับข้อมูลส่วนอื่นในบรรทัดนั้น ไม่มีการตัดบรรทัด ส่วน multicell ก็มีปัญหานิดหน่อย  มีประเด็นแลกเปลี่ยน ดังนี้
1. การเขียน content-type เป็น pdf นั้น (เป็นเรื่องที่กรพูดถึง)
คำสั่งพื้นฐานของ PHP ออกแบบมาให้เขียน header แล้วผู้ใช้ก็ load file ไป
อาจถูกใช้เพื่อป้องกันการเข้าถึงแฟ้ม pdf โดยตรง
แต่เทคนิคนี้ไม่ได้ใช้ php เขียนข้อมูล เพื่อสร้าง pdf ใหม่ แต่เน้น load file ที่มีอยู่

header(“Content-type: application/pdf”);
header(“Content-Length: $len”);
header(“Content-Disposition: inline; filename=foo.pdf”);
readfile($filename);

2. multicell จะเลื่อนตัวชี้ไปบรรทัดใหม่ (ซันแนะนำมา)
สามารถตัดข้อมูลเป็นหลายบรรทัดได้ แต่ pointer จะขึ้นบรรทัดใหม่หลังใช้ multicell
หากต้องการเขียน cell ต่อไปก็ต้องไปเริ่มบรรทัดใหม่ จึงไม่สามารถใช้ multicell
เป็นฟิลด์แรกของแต่ละบรรทัดข้อมูล
3. เทคนิคการตัดบรรทัดข้อมูล แล้วแสดงผลแยก cell
วิธีข้างล่างนี้ยุ่งยากน่าดู ทำให้นึกถึงการเขียน graphic บน java แต่นี่คือ pdf
download module FPDF ได้ที่
http://resource.thaicreate.com/upload/script/pdf-thai.zip

<body><?php
require(‘fpdf.php’);
define(‘FPDF_FONTPATH’,’font/’);
$pdf=new FPDF();
$pdf->AddPage();
$pdf->AddFont(‘angsa’,”,’angsa.php’);
$pdf->SetFont(‘angsa’,”,36);
$pdf->Cell(0,20,iconv( ‘UTF-8′,’TIS-620′,’เธชเธงเธฑเธชเธ”เธต’),0,1,”C”);
$pdf->SetFont(‘angsa’,”,10);
$pdf->Cell(50, 3 ,’ธรณีนี่นี้ เป็นพยาน เราก็ศิษย์มีอาจารย์ หนึ่งบ้าง เราผิดท่านประหาร เราชอบ’);
$pdf->Cell(30,3,”ธรณีนี่นี้เป็นพยาน”,1,”L”);
$pdf->Cell(30,3,”ธรณีนี่นี้เป็นพยาน”,1,”L”);
$pdf->ln(11);
$pdf->SetFillColor(255,255,0);
$pdf->Rect(10, 40, 40, 10,”F”);
$pdf->Rect(50, 40, 40, 10);
$pdf->Rect(90, 40, 40, 10);
$pdf->SetFont(‘angsa’,”,10);
// ===
$pdf->Cell(50, 3 ,’ธรณีนี่นี้ เป็นพยาน เราก็ศิษย์มีอาจารย์ ‘);
$pdf->Cell(30,3,”ธรณีนี่นี้เป็นพยาน”,0,”L”);
$pdf->Cell(30,3,”ธรณีนี่นี้เป็นพยาน”,0,”L”);
$pdf->ln();
$pdf->Cell(50, 3 ,’หนึ่งบ้าง เราผิดท่านประหาร เราชอบ’);
$pdf->ln();
$pdf->Cell(50, 3 ,’เราบ่ผิดท่านมล้าง ดาบนั้น คืนสนอง’);
$pdf->ln(5);
// ===
$f = time();
$pdf->Output(“$f.pdf”,”F”);
echo “<a href=’$f.pdf’>here</a>”;
// http://www.fpdf.org/en/script/script3.php
// http://www.fpdf.org/en/doc/multicell.htm
// http://www.select2web.com/fpdf/fpdf-lesson-14.html
?>
</body>

Author: บุรินทร์ รุจจนพันธุ์

I am Lecturer, Developer, Researcher, Columnist, Writer, Photographer, and Webmaster - L@mpang man

Leave a Reply