การสร้าง pdf ในสคริปต์ php ฟังก์ชั่น PDF การคำนวณขนาดและความกว้างของคอลัมน์

ฟังก์ชั่น PDF

การแนะนำ

ฟังก์ชัน PDF ใน PHP สามารถสร้างไฟล์ PDF โดยใช้ไลบรารี PDFlib โดย Thomas Merz

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

ในไลบรารี PDFlib และในโมดูล PHP ฟังก์ชันและพารามิเตอร์ทั้งหมดมีชื่อเหมือนกัน คุณต้องเข้าใจแนวคิดพื้นฐานของ PDF และ PostScript เพื่อใช้ส่วนขยายนี้อย่างมีประสิทธิภาพ
มิติข้อมูลและพิกัดทั้งหมดวัดเป็นจุด PostScript โดยทั่วไปจะมี 72 PostScript ppi แต่ขึ้นอยู่กับความละเอียดของเอาต์พุต ดูเอกสาร PDFlib ที่มาพร้อมกับการกระจาย PDFlib สำหรับคำอธิบายของระบบพิกัดที่ใช้

โปรดทราบว่าส่วนใหญ่ ฟังก์ชั่น PDFจำเป็นต้อง วัตถุ PDFเป็นพารามิเตอร์แรก ดูตัวอย่างด้านล่าง

บันทึก:มีทางเลือกอื่น โมดูล PHPเพื่อสร้างเอกสาร PDF ตาม ClibPDF ของ FastIO ดูส่วน ClibPDF โปรดทราบว่า ClibPDF มี API ที่แตกต่างกันเล็กน้อยเมื่อเทียบกับ PDFlib

ความต้องการ

PDFlib สามารถดาวน์โหลดได้ที่ http://www.pdflib.com/products/pdflib/index.html แต่ต้องมีใบอนุญาตแบบชำระเงินเพื่อ ใช้ในเชิงพาณิชย์- จำเป็นต้องใช้ไลบรารี JPEG และ TIFF เมื่อรวบรวมส่วนขยายนี้

หากต้องการใช้ฟังก์ชันเหล่านี้ใน PHP

เมื่อคุณใช้ PDFlib เวอร์ชัน 3.x คุณต้องกำหนดค่า PDFlib ด้วยตัวเลือก --enable-shared-pdflib

ใน PHP 4.3.9 คุณต้องติดตั้งส่วนขยายนี้ผ่าน PEAR โดยใช้คำสั่งต่อไปนี้: ลูกแพร์ติดตั้ง pdflib.

ข้อขัดแย้งกับ PDFlib เวอร์ชันเก่า

ตั้งแต่ PHP 4.0.5 ส่วนขยาย PHP สำหรับ PDFlib ได้รับการสนับสนุนอย่างเป็นทางการโดย PDFlib GmbH ซึ่งหมายความว่าฟังก์ชันทั้งหมดที่อธิบายไว้ในบทช่วยสอน PDFlib (เวอร์ชัน 3.00 หรือสูงกว่า) ได้รับการสนับสนุนใน PHP 4 โดยมีค่าและพารามิเตอร์เหมือนกันทุกประการ เฉพาะค่าที่ส่งคืนเท่านั้นที่อาจแตกต่างจากบทช่วยสอน PDFlib เนื่องจากมีการใช้หลักการส่งคืนของ PHP เท็จ- เพื่อเหตุผลด้านความเข้ากันได้ การผูก PDFlib นี้ยังคงรองรับฟังก์ชันเก่า แต่ควรแทนที่ด้วยเวอร์ชันที่ใหม่กว่า PDFlib GmbH จะไม่คำนึงถึงปัญหาที่เกิดขึ้นเมื่อใช้งานฟังก์ชันเก่าเหล่านี้

ฟังก์ชั่นเก่า การทดแทน
pdf_put_image() ไม่จำเป็นอีกต่อไป
pdf_execute_image() ไม่จำเป็นอีกต่อไป
pdf_get_annotation() pdf_get_bookmark()โดยใช้พารามิเตอร์เดียวกัน
pdf_get_font() pdf_get_value()โดยส่ง "font" เป็นพารามิเตอร์ตัวที่สอง
pdf_get_fontsize() pdf_get_value()โดยส่ง "fontsize" เป็นพารามิเตอร์ตัวที่สอง
pdf_get_fontname() pdf_get_parameter()โดยส่ง "fontname" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_info_creator() pdf_set_info()โดยส่ง "ผู้สร้าง" เป็นพารามิเตอร์ที่สอง
pdf_set_info_title() pdf_set_info()โดยส่ง "Title" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_info_subject() pdf_set_info()โดยส่ง "Subject" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_info_author() pdf_set_info()โดยส่ง "Author" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_info_keywords() pdf_set_info()โดยส่ง "คำหลัก" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_leading() pdf_set_value()โดยส่ง "leading" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_text_rendering() pdf_set_value()โดยส่ง "textrendering" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_text_rise() pdf_set_value()โดยส่ง "textrise" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_horiz_scaling() pdf_set_value()โดยส่ง "horizscaling" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_text_matrix() ไม่มีให้บริการอีกต่อไป
pdf_set_char_spacing() pdf_set_value()โดยส่ง "charspacing" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_word_spacing() pdf_set_value()โดยส่ง "wordspacing" เป็นพารามิเตอร์ตัวที่สอง
pdf_set_transition() pdf_set_parameter()โดยส่งผ่าน "การเปลี่ยนแปลง" เป็นพารามิเตอร์ตัวที่สอง
pdf_open() pdf_ใหม่()พร้อมโทรติดตามผล pdf_open_file()
pdf_set_font() pdf_findfont()พร้อมโทรติดตามผล pdf_setfont()
pdf_set_duration() pdf_set_value()โดยส่ง "ระยะเวลา" เป็นพารามิเตอร์ตัวที่สอง
pdf_open_gif() pdf_open_image_file()โดยส่ง "gif" เป็นพารามิเตอร์ตัวที่สอง
pdf_open_jpeg() pdf_open_image_file()โดยส่ง "jpeg" เป็นพารามิเตอร์ตัวที่สอง
pdf_open_tiff() pdf_open_image_file()โดยส่ง "tiff" เป็นพารามิเตอร์ตัวที่สอง
pdf_open_png() pdf_open_image_file()โดยส่ง "png" เป็นพารามิเตอร์ตัวที่สอง
pdf_get_image_width() pdf_get_value()โดยส่ง "imagewidth" เป็นพารามิเตอร์ตัวที่สองและรูปภาพเป็นพารามิเตอร์ตัวที่สาม
pdf_get_image_height() pdf_get_value()โดยส่ง "imageheight" เป็นพารามิเตอร์ตัวที่สองและรูปภาพเป็นพารามิเตอร์ตัวที่สาม

เคล็ดลับการติดตั้ง PDFlib3.x

เมื่อใช้ PDFlib เวอร์ชัน 3.x คุณต้องกำหนดค่า PDFlib ด้วยตัวเลือก
--enable-share-pdflib .

คำถามเกี่ยวกับ PDFlib เวอร์ชันเก่า

รองรับ PDFlib 3.0 หรือสูงกว่าใน PHP 3.0.19 และใหม่กว่า

ตัวอย่าง

คุณสมบัติส่วนใหญ่ค่อนข้างใช้งานง่าย ส่วนที่ยากที่สุดคือการสร้างเอกสาร PDF ที่เรียบง่าย ตัวอย่างต่อไปนี้จะช่วยคุณเริ่มต้นได้ มันสร้าง test.pdf จากหน้าเดียว หน้านี้ประกอบด้วยข้อความ "Times Roman เค้าร่าง" ในแบบอักษรเค้าร่างขนาด 30pt ข้อความก็ขีดเส้นใต้ด้วย

ตัวอย่างที่ 1: การสร้างเอกสาร PDF โดยใช้ PDFlib

$pdf = pdf_new();
pdf_open_file($pdf, "test.pdf");

pdf_set_info ($pdf, "ชื่อเรื่อง", "ทดสอบ PHP wrapper ของ PDFlib 2.0");
pdf_set_info($pdf, "ผู้สร้าง", "ดูผู้เขียน");
pdf_set_info($pdf, "หัวเรื่อง", "กำลังทดสอบ");
pdf_begin_page($pdf, 595, 842);
pdf_add_outline($pdf, "หน้า 1");
$font = pdf_findfont ($pdf, "Times New Roman", "winansi", 1);
pdf_setfont($pdf, $แบบอักษร, 10);
pdf_set_value($pdf, "การเรนเดอร์ข้อความ", 1);
pdf_show_xy($pdf, "โครงร่างไทม์สโรมัน", 50, 750);
pdf_moveto($pdf, 50, 740);
pdf_lineto($pdf, 330, 740);
pdf_จังหวะ($pdf);
pdf_end_page($pdf);
pdf_close($pdf);
pdf_delete($pdf);
เสียงสะท้อน "ที่เสร็จเรียบร้อย" ;
?>

สคริปต์ getpdf.php ส่งคืนเอกสาร PDF:

$len = ขนาดไฟล์($ชื่อไฟล์);
ส่วนหัว();

ส่วนหัว();
readfile($ชื่อไฟล์);
?>

การแจกแจง PDFlib มีตัวอย่างที่ซับซ้อนมากขึ้นซึ่งมีการสร้างเพจที่มีนาฬิกาอะนาล็อก ที่นี่เราใช้คุณสมบัติการสร้างในหน่วยความจำของ PDFlib เพื่อหลีกเลี่ยงการใช้ไฟล์ชั่วคราว ตัวอย่างนี้ ซึ่งแปลงเป็น PHP จากตัวอย่าง PDFlib คือ: (ตัวอย่างเดียวกันนี้มีอยู่ในเอกสารประกอบของ CLibPDF)

ตัวอย่างที่ 2 pdfclock จากการแจกแจง PDFlib

$รัศมี = 200 ;
$มาร์จิ้น = 20 ;
$pagecount = 10 ;$pdf = pdf_new ();pdf_open_file ($pdf , "" )) (
ข้อผิดพลาดของเสียงสะท้อน;
ออก;
);pdf_set_parameter ($pdf , "คำเตือน" , "true" );pdf_set_info ($pdf , "ผู้สร้าง" , "pdf_clock.php" );
pdf_set_info($pdf, "ผู้เขียน", "อูเว่ สไตน์มันน์");
pdf_set_info ($pdf , "หัวข้อ" , "นาฬิกาอะนาล็อก" );$pagecount -- > 0 ) (
pdf_begin_page ($pdf, 2 * ($รัศมี + $margin), 2 * ($radius + $margin));pdf_set_parameter ($pdf, "การเปลี่ยนแปลง" , "เช็ด" );
pdf_set_value ($pdf, "ระยะเวลา", 0.5);pdf_translate ($pdf, $radius + $margin, $radius + $margin);
pdf_save($pdf);
pdf_setrgbcolor ($pdf, 0.0, 0.0, 1.0);/* นาทีจังหวะ */
pdf_setlinewidth($pdf, 2.0);
สำหรับ ($alpha = 0 ; $alpha< 360 ; $alpha += 6 ) {
pdf_rotate($pdf, 6.0);

pdf_lineto ($pdf, $radius - $margin / 3, 0.0);
pdf_จังหวะ($pdf);
)pdf_restore($pdf);
pdf_save ($pdf );/* 5 นาที */
pdf_setlinewidth($pdf, 3.0);
สำหรับ ($alpha = 0 ; $alpha< 360 ; $alpha += 30 ) {
pdf_rotate($pdf, 30.0);
pdf_moveto($pdf, $รัศมี, 0.0);
pdf_lineto ($pdf, $รัศมี - $ระยะขอบ, 0.0);
pdf_จังหวะ($pdf);
)$ltime = getdate();/* วาดเข็มชั่วโมง */
pdf_save($pdf);
pdf_rotate ($pdf ,-(($ltime [ "นาที" ]/ 60.0 )+ $ltime [ "ชั่วโมง" ]- 3.0 )* 30.0 );

pdf_lineto ($pdf, $รัศมี / 2, 0.0);

pdf_closepath($pdf);
pdf_fill($pdf);
pdf_restore ($pdf );/* วาดเข็มนาที */
pdf_save($pdf);
pdf_rotate ($pdf ,-(($ltime [ "วินาที" ]/ 60.0 )+ $ltime [ "นาที" ]- 15.0 )* 6.0 );
pdf_moveto ($pdf, - $รัศมี / 10, - $รัศมี / 20);
pdf_lineto ($pdf, $รัศมี * 0.8, 0.0);
pdf_lineto ($pdf, - $รัศมี / 10, $รัศมี / 20);
pdf_closepath($pdf);
pdf_fill($pdf);
pdf_restore ($pdf );/* วาดมือสอง */
pdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
pdf_setlinewidth($pdf, 2);
pdf_save($pdf);
pdf_rotate ($pdf , -(($ltime [ "วินาที" ] - 15.0 ) * 6.0 ));
pdf_moveto ($pdf, - $รัศมี / 5, 0.0);
pdf_lineto($pdf, $รัศมี, 0.0);
pdf_จังหวะ($pdf);
pdf_restore($pdf); /* วาดวงกลมเล็กๆ ตรงกลาง */
pdf_circle ($pdf, 0, 0, $รัศมี / 30);
pdf_fill ($pdf );pdf_restore ($pdf );pdf_end_page ($pdf );# เพื่อดูความแตกต่าง
นอนหลับ(1);
)pdf_close($pdf);$buf = pdf_get_buffer($pdf);
$len = strlen ($buf );ส่วนหัว ( "ประเภทเนื้อหา: application/pdf");
header("ความยาวเนื้อหา: $len");
ส่วนหัว( "การจัดการเนื้อหา: inline; filename=foo.pdf");
เสียงสะท้อน $buf ;pdf_delete ($pdf );
?>
เนื้อหา

pdf_add_annotation - ไม่แนะนำ: เพิ่มคำอธิบายประกอบ pdf_add_bookmark - เพิ่มบุ๊กมาร์กในหน้าปัจจุบัน pdf_add_launchlink - เพิ่มคำอธิบายประกอบการเปิดตัวในหน้าปัจจุบัน pdf_add_locallink - เพิ่มคำอธิบายประกอบลิงก์ในหน้าปัจจุบัน pdf_add_note - เพิ่มคำอธิบายประกอบหมายเหตุในหน้าปัจจุบัน pdf_add_outline - ไม่ใช่ แนะนำ: เพิ่มบุ๊กมาร์กในหน้าปัจจุบัน pdf_add_pdflink - เพิ่มลิงค์คำอธิบายประกอบไปยังไฟล์ในหน้าปัจจุบัน pdf_add_thumbnail - เพิ่มภาพขนาดย่อ/ภาพขนาดย่อในหน้าปัจจุบัน pdf_add_weblink - เพิ่มลิงค์เว็บในหน้าปัจจุบัน pdf_arc - วาดส่วนโค้ง (ทวนเข็มนาฬิกา ) pdf_arcn - วาดส่วนโค้ง (ตามเข็มนาฬิกา) pdf_attach_file - เพิ่มไฟล์แนบในหน้าปัจจุบัน pdf_begin_page - เริ่มหน้าใหม่ pdf_begin_pattern - เริ่มรูปแบบใหม่ pdf_begin_template - เริ่มรูปแบบใหม่ pdf_circle - วาดวงกลม pdf_clip - คลิปไปยังเส้นทางปัจจุบัน pdf_close_image - ปิดรูปภาพ pdf_close_pdi_page - ปิดตัวจัดการเพจ pdf_close_pdi - ปิดอินพุตเอกสาร PDF pdf_close - ปิดวัตถุ pdf pdf_closepath_fill_ stroke - ปิด เติม และร่างเส้นทางปัจจุบัน
เว็บไซต์นามบัตร: คุณสมบัติของการเริ่มต้นที่ดี
ที่นอนลมจาก Lamon
WebNames.Ru – ทศวรรษแห่งกิจกรรมบนอินเทอร์เน็ต
อพาร์ทเมนต์สำหรับเว็บไซต์ของคุณ
เทคโนโลยีจาก BoldSoft
วิธีที่จะประสบความสำเร็จในโครงการที่สิ้นหวัง
ระบบนำทางรูปแบบใหม่สำหรับการแสดงหน้า
การสร้าง PDF โดยใช้ PHP
PHP และ PostgreSQL
การเพิ่มประสิทธิภาพ MySQL

การสร้าง PDF โดยใช้ PHP

คำนำ
เหตุผลหนึ่งที่ฉันรัก PHP- เนื่องจากมีการให้การสนับสนุนเทคโนโลยีใหม่ๆ อย่างต่อเนื่อง ภาษาสามารถขยายได้ง่าย และนักพัฒนาก็สามารถเพิ่มโมดูลใหม่ลงไปได้อย่างง่ายดาย PHPได้กลายเป็นหนึ่งในภาษาเว็บที่ใช้งานได้ดีที่สุดโดยรองรับเทคโนโลยีที่แตกต่างกันมากมาย ส่วนขยายที่มีให้บริการในปัจจุบันช่วยให้นักพัฒนาสามารถทำงานกับเซิร์ฟเวอร์ IMAP และ POP3 ได้อย่างง่ายดาย สร้างรูปภาพและภาพวาดแบบไดนามิกในรูปแบบ Flash ดำเนินการตรวจสอบบัตรเครดิต เข้ารหัสข้อมูลที่ละเอียดอ่อน และทำงานกับฐานข้อมูล XML

และนั่นไม่ใช่ทั้งหมด! หนึ่งในส่วนขยายที่น่าสนใจที่สุดที่เพิ่มเข้ามาในปัจจุบัน PHP- นี่คือส่วนขยาย PDFLibซึ่งช่วยให้นักพัฒนาสามารถสร้างเอกสารในรูปแบบแบบไดนามิกได้ PDF (รูปแบบเอกสาร Adobe Portable)- ในอีกไม่กี่หน้าข้างหน้า ผมจะพูดสั้นๆ เกี่ยวกับโมดูลนี้ และให้ภาพรวมของฟังก์ชันที่ใช้ และบอกวิธีใช้ส่วนขยายนี้ในการพัฒนา PHP ไปกันเลย!

ไปกันเลย!
เพื่อเปิดใช้งานส่วนขยาย PDFLibขั้นแรกคุณต้องติดตั้งไลบรารีที่เหมาะสมบนระบบของคุณ ถ้าคุณทำงานเพื่อ ลินุกซ์คุณสามารถดาวน์โหลดสำเนาได้จาก http://www.pdflib.com/pdflib/index.html และคอมไพล์สำหรับเซิร์ฟเวอร์ของคุณ หากคุณทำงานบน Windows ทุกอย่างจะง่ายขึ้นมาก - พร้อมกับการแจกจ่าย PHPมีการจัดหาโมดูลที่คอมไพล์แล้ว PDFและสิ่งที่คุณต้องทำคือเปิดใช้งานโดยยกเลิกการใส่เครื่องหมายบรรทัดที่เกี่ยวข้องในไฟล์กำหนดค่า

นอกจากนี้คุณจะต้องมีสำเนาของโปรแกรม โปรแกรมอ่าน Adobe Acrobat PDFเพื่ออ่านเอกสารที่สร้างโดยใช้ห้องสมุด PDFLib- คุณสามารถดาวน์โหลด Adobe Acrobat Reader ได้ฟรีจากเว็บไซต์ของผู้ผลิต: http://www.adobe.com/

เมื่อติดตั้งทุกอย่างเรียบร้อยแล้ว ก็ถึงเวลาสร้างความเรียบง่าย PDFเอกสาร:

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

สิทธิ์ทั้งหมดในการเผยแพร่บทความนี้เป็นของ

บทเรียนกายวิภาคศาสตร์
มาดูโค้ดที่ใช้ในตัวอย่างด้านบนกันดีกว่า

การสร้าง PDFไฟล์ใน PHPประกอบด้วย 4 ขั้นตอนพื้นฐาน: การสร้างดัชนีให้กับเอกสาร การลงทะเบียนแบบอักษรและสีสำหรับเอกสาร การเขียนหรือการวาดภาพลงในดัชนีโดยใช้ฟังก์ชันที่กำหนดไว้ล่วงหน้า และการบันทึกเอกสาร

เริ่มจากขั้นตอนแรกกันก่อน - สร้างตัวชี้ไปที่ PDF

// สร้างตัวจัดการสำหรับเอกสาร PDF ใหม่ $pdf = pdf_new();

ซึ่งสามารถทำได้โดยใช้ฟังก์ชัน pdf_new() ซึ่งส่งคืนตัวชี้ไปยังเอกสารนี้ ตัวชี้นี้จะใช้ในการดำเนินการสร้างที่ตามมาทั้งหมด PDFเอกสาร.

ขั้นต่อไปคือการให้ PDFชื่อไฟล์ - ทำได้โดยฟังก์ชัน pdf_open_file() ซึ่งรับสองอาร์กิวเมนต์ - ตัวชี้ที่ส่งคืนโดยฟังก์ชันก่อนหน้าและชื่อไฟล์จริงที่กำหนดโดยผู้ใช้

// เปิดไฟล์ pdf_open_file($pdf, "philosophy.pdf");

เมื่อสร้างเอกสารแล้ว คุณสามารถแทรกจุดเริ่มต้นของหน้าใหม่ได้โดยใช้ฟังก์ชัน pdf_begin_page()

// เริ่มหน้าใหม่ (A4) pdf_begin_page($pdf, 595, 842);

และท้ายหน้า - ใช่ เดาเอา!! - ฟังก์ชั่น pdf_end_page()

// หน้าสุดท้าย pdf_end_page($pdf);

โปรดทราบว่าฟังก์ชัน pdf_begin_page() ต้องการพารามิเตอร์เพิ่มเติมสองตัว ซึ่งแสดงความกว้างและความสูงของเอกสารที่สร้างขึ้นในหน่วยพิกเซล (พิกเซลคือ 1/72 นิ้ว) หากคุณไม่เก่งคณิต ให้เปิดตำราเรียน PHPรวมขนาดมาตรฐานสำหรับขนาดหน้าทั่วไปทั้งหมด รวมถึง A4 ซึ่งใช้ด้านบน

ระหว่างการเรียก pdf_begin_page() และ pdf_end_page() จะมีโค้ดที่เขียนลงในไฟล์ ไม่ว่าจะเป็นข้อความ รูปภาพ หรือรูปทรงเรขาคณิต ในตัวอย่างนี้ ฉันแค่เขียนบรรทัดข้อความลงในเอกสาร ดังนั้นสิ่งที่ฉันต้องทำคือเลือกแบบอักษรและนำไปใช้เมื่อเขียนข้อความลงในเอกสาร

การเลือกแบบอักษรและการลงทะเบียนทำได้โดยฟังก์ชัน pdf_findfont() และ pdf_setfont() ฟังก์ชัน pdf_findfont() เลือกแบบอักษรที่จะใช้ในเอกสาร และต้องมีชื่อแบบอักษร วิธีการเข้ารหัส และพารามิเตอร์บูลีนที่ระบุว่าควรฝังแบบอักษรในเอกสารหรือไม่ PDFเอกสาร; และส่งคืนออบเจ็กต์ฟอนต์ ซึ่งสามารถนำมาใช้เมื่อเรียกใช้ฟังก์ชัน pdf_setfont()

$arial = pdf_findfont($pdf, "Arial", "host", 1); pdf_setfont($pdf, $arial, 10); เมื่อเลือกแบบอักษรแล้ว คุณจะสามารถใช้ฟังก์ชัน pdf_show_xy() เพื่อเขียนข้อความไปยังตำแหน่งเฉพาะบนหน้าเว็บได้
// พิมพ์ข้อความ pdf_show_xy($pdf, "ยังมีอีกหลายสิ่งในสวรรค์และโลก, Horatio,", 50, 750); pdf_show_xy($pdf, "เกินกว่าที่คุณใฝ่ฝันในปรัชญาของคุณ", 50, 730);

ดังที่คุณสังเกตเห็นว่าฟังก์ชันนี้ต้องใช้ตัวชี้ PDFเอกสาร ลิงก์ไปยังวัตถุแบบอักษรที่ใช้ ข้อความที่จะเขียน และพิกัด XY ของสถานที่ที่จะเริ่มต้นเขียนข้อความ พิกัดเหล่านี้ระบุโดยสัมพันธ์กับจุด (0,0) ซึ่งอยู่ที่มุมซ้ายล่างของเอกสาร

เมื่อเขียนข้อความแล้ว หน้าจะถูกปิดโดยการเรียกใช้ฟังก์ชัน pdf_end_page() จากนั้นคุณสามารถเพิ่มหน้าได้อีก หรืออย่างที่ฉันทำที่นี่ เพียงปิดเอกสารโดยใช้ pdf_close() ฟังก์ชั่นนี้จะบันทึกเอกสารด้วยชื่อที่ระบุเมื่อเรียก pdf_open_file() และทำลายตัวชี้เอกสาร

สิทธิ์ทั้งหมดในการเผยแพร่บทความนี้เป็นของ

และนี่คือเอาต์พุต PDF:

ความมหัศจรรย์ทั้งหมดอยู่ที่ฟังก์ชัน pdf_open_image_file() และ pdf_place_image() อันแรกใช้ประเภทรูปภาพ - GIF, JPEG, TIFF หรือ PNG- และชื่อไฟล์เป็นอาร์กิวเมนต์ และส่งกลับตัวชี้ไปที่รูปวาด ซึ่งจากนั้นสามารถนำมาใช้ซ้ำในเอกสารได้

ตัวชี้ไปยังรูปภาพที่ส่งคืนด้านบนสามารถส่งผ่านไปยังฟังก์ชัน pdf_place_image() ซึ่งจะวางรูปภาพในตำแหน่งเฉพาะบนเพจ พิกัดที่ส่งผ่านไปยังฟังก์ชันนี้ (อาร์กิวเมนต์ที่สองและสาม) อ้างอิงถึงมุมซ้ายล่างของรูปภาพ และอาร์กิวเมนต์ที่สี่ระบุพารามิเตอร์มาตราส่วนของรูปภาพเมื่อแสดง (1 - จะแสดงภาพที่มาตราส่วน 100%, 0.5 จะแสดง ลดไปครึ่งหนึ่ง)

สิทธิ์ทั้งหมดในการเผยแพร่บทความนี้เป็นของ

ระยะทางที่สั้นที่สุดระหว่างจุดสองจุด
อย่าหยุด! โมดูล PDFมีฟังก์ชันมากมายที่จะช่วยให้คุณวาดเส้น วงกลม และรูปร่างอื่นๆ ได้ นี่คือตัวอย่างที่เราจะวาดเส้น

นี่คือสิ่งที่คุณจะเห็น:

ในกรณีนี้ กระบวนการวาดเส้นเกี่ยวข้องกับการใช้ฟังก์ชัน pdf_moveto(), pdf_lineto() และ pdf_ stroke()

ในตัวอย่างข้างต้น ฉันกำลังลากเส้นจากจุด (20,780) ไปยังจุด (575, 780) เมื่อต้องการทำเช่นนี้ ฉันต้องวางเคอร์เซอร์ที่จุดเริ่มต้น (20,780) ก่อนโดยการเรียกใช้ฟังก์ชัน to pdf_moveto()

จากนั้นคุณจะต้องตั้งค่าจุดสิ้นสุดโดยใช้ pdf_lineto():

สุดท้าย เราวาดเส้นโดยใช้ pdf_ stroke()

สีของเส้นถูกกำหนดโดยฟังก์ชัน pdf_setcolor() ซึ่งรับพารามิเตอร์หลายตัว: ตัวชี้ไปที่ PDFเอกสาร ประเภทเส้น: "สโตรก" "เติม" หรือ "ทั้งสอง" จานสี (RGB หรือ CMYK) และรายการค่าสีที่ตรงกับจานสีที่เลือก

pdf_setcolor($pdf, "เส้นขีด", "rgb", 0, 0, 0);

สิ่งสำคัญคือต้องทราบว่าต้องระบุรายการค่าสีที่ส่งไปยัง pdf_setcolor() เป็นค่าเปอร์เซ็นต์ความเข้ม - นั่นคือความเข้มของสีที่กำหนดซึ่งแสดงเป็นเปอร์เซ็นต์ของค่าสูงสุดที่เป็นไปได้ ตัวอย่างเช่น หากฉันต้องการตั้งค่า (RGB: 255,0,0) เป็นสีเติม การเรียกใช้ฟังก์ชัน pdf_setcolor() ของฉันจะมีลักษณะดังนี้

pdf_setcolor($pdf, "เส้นขีด", "rgb", 1, 0, 0);

และไส้สีเหลืองจะมีลักษณะดังนี้:

pdf_setcolor($pdf, "เติม", "rgb", 1, 1, 0);

สิทธิ์ทั้งหมดในการเผยแพร่บทความนี้เป็นของ

หมุดสี่เหลี่ยม รูกลม
เส้นไม่ใช่สิ่งเดียวที่คุณสามารถวาดได้ วงกลมและสี่เหลี่ยมก็อยู่ในเมนูของวันนี้เช่นกัน ดูตัวอย่างด้านล่าง:

นี่คือผลลัพธ์:

ในกรณีนี้ ฟังก์ชัน pdf_rect() ใช้ในการวาดรูปสี่เหลี่ยมผืนผ้าโดยใช้พิกัดที่กำหนดของมุมซ้ายล่าง ความสูง และความกว้าง จากนั้นสี่เหลี่ยมจะถูกเติมและลากเส้นด้วยสองสีที่แตกต่างกันโดยใช้ฟังก์ชัน pdf_fill_ stroke()

pdf_setcolor($pdf, "เติม", "rgb", 1, 1, 0); pdf_setcolor($pdf, "เส้นขีด", "rgb", 0, 0, 0); pdf_rect($pdf, 50, 500, 200, 300); pdf_fill_ stroke($pdf);

วงกลมถูกวาดโดยฟังก์ชัน pdf_circle() ซึ่งรับสามอาร์กิวเมนต์: พิกัด X และ Y ของศูนย์กลางของวงกลมและความยาวของรัศมี

pdf_circle($pdf, 400, 600, 100);

ความสามารถในการวาดภาพเรขาคณิตได้ทันทีนี้สามารถมีประโยชน์ได้ในสถานการณ์ต่างๆ ตัวอย่างเช่น นี่คือหนึ่งในนั้น - ในนั้น คู่ของลูป "for" เชื่อมต่อกับฟังก์ชัน pdf_lineto() เพื่อสร้างตารางเส้น

นี่คือผลลัพธ์:

สิทธิ์ทั้งหมดในการเผยแพร่บทความนี้เป็นของ

และตอนนี้เมื่อดูเอกสารใน อะโดบี รีดเดอร์คุณจะสามารถดูข้อมูลนี้ได้ในคุณสมบัติเอกสาร

สิทธิ์ทั้งหมดในการเผยแพร่บทความนี้เป็นของ

ชิ้นส่วนของพาย
ตอนนี้คุณรู้วิธีสร้างเอกสารแล้ว PDFมาดูการใช้งานจริงกันดีกว่า ตัวอย่างต่อไปนี้จะสาธิตวิธีการ PHPสามารถรับข้อมูลตัวเลขและสร้างกราฟจากข้อมูลเหล่านั้นได้ เช่น กราฟวงกลมหลากสี

แบบฟอร์มด้านล่างจะขอข้อมูลหลายส่วน ในรูปแบบตัวเลขคั่นด้วยเครื่องหมายจุลภาค หลังจากป้อนตัวเลขไม่กี่ตัว สคริปต์ "pie.php" จะแปลงตัวเลขเหล่านั้นจากตัวเลขสัมบูรณ์เป็นชิ้นส่วนของข้อมูลที่มีขนาดสัมพันธ์กัน และใช้ชิ้นส่วนเหล่านี้เพื่อสร้าง PDFเอกสารที่มีแผนภูมิวงกลม เน้นส่วนต่างๆ และเติมสีที่ต่างกัน

เครื่องกำเนิดแผนภูมิวงกลม

ป้อนค่าตัวเลข (ส่วนของวงกลม) คั่นด้วยเครื่องหมายจุลภาค


และนี่คือสคริปต์:

ข้อมูลที่กรอกลงในแบบฟอร์มจะถูกส่งไปยังสคริปต์ "pie.php" ในตัวแปร $data จากนั้นข้อมูลนี้จะถูกแบ่งออกเป็นองค์ประกอบแต่ละส่วนโดยใช้ explode() และแต่ละค่าจะถูกกำหนดให้กับอาร์เรย์ $slices จากนั้นวงจะแปลงตัวเลขเหล่านี้เป็นองศาสำหรับวงกลมและวาดส่วนโค้งสำหรับแต่ละชิ้น แต่ละวงที่ผ่านจะคำนวณพิกัดของจุดสิ้นสุดของส่วนโค้งและวาดส่วนของเส้นเพื่อแยกส่วนโค้งออกจากส่วนที่เหลือของวงกลม เมื่อวาดชิ้นส่วนของพายแล้ว ฟังก์ชัน pdf_fill_ stroke() จะถูกนำมาใช้เพื่อเติมสี สีนั้นนำมาจากอาร์เรย์ $colors

เราจะไม่พิจารณาว่าสคริปต์คำนวณความยาวของแต่ละส่วนโค้งและส่วนของเส้นอย่างไร - ทุกอย่างอธิบายไว้ในความคิดเห็นของโค้ด

หากคุณป้อนข้อมูล 5 ส่วนเท่ากัน กราฟจะมีลักษณะดังนี้

หากคุณป้อน 2 ดังนั้น:

แค่นั้นแหละ - เล่นกับสคริปต์และดูว่าชิ้นส่วนต่างๆ เปลี่ยนแปลงรูปร่างอย่างไร ซึ่งสะท้อนถึงขนาดที่สัมพันธ์กันของข้อมูล จนกว่าจะถึงตอนนั้น - แล้วพบกันใหม่!

หมายเหตุ: ตัวอย่างทั้งหมดในบทความนี้ได้รับการทดสอบบนแพลตฟอร์มแล้ว Linux/i586 พร้อม Apache 1.3.12 และ PHP 4.2.0ตัวอย่างมีไว้เพื่อวัตถุประสงค์ในการอธิบายเท่านั้น และไม่ได้มีไว้สำหรับการใช้งานในชีวิตจริง

ตอนนี้คุณสามารถเพิ่มชื่อเรื่องสำหรับรายงานได้ วัตถุ FPDF ใช้แนวคิดของ "ตำแหน่งปัจจุบัน" โดยที่ข้อความชิ้นถัดไปหรือองค์ประกอบอื่นถูกแทรก เนื่องจากคุณต้องการให้ชื่อรายงานอยู่ตรงกลางหน้า คุณต้องย้ายตำแหน่งปัจจุบันลงมาที่จุดนี้ ซึ่งอยู่ห่างจากด้านบนของหน้า 160 มม. (ค่าจะถูกเก็บไว้ใน $ ตัวแปรการกำหนดค่า reportNameYPos) เมื่อต้องการทำเช่นนี้ ให้ใช้เมธอด FPDF Ln() ซึ่งจะเพิ่มการป้อนบรรทัดตามระยะทางที่ระบุ:

$pdf->Ln($reportNameYPos);

หากคุณไม่ระบุความสูงของการป้อนบรรทัด ระบบจะใช้ความสูงของเซลล์ที่แสดงล่าสุด

ตอนนี้เรามาเพิ่มชื่อเรื่องของรายงานกัน มีหลายวิธีในการเพิ่มข้อความโดยใช้ FPDF ในกรณีของเรา เราใช้เมธอด Cell() ซึ่งทำให้ง่ายต่อการจัดกึ่งกลางข้อความ

Cell() รับอาร์กิวเมนต์ต่อไปนี้ (เป็นทางเลือกทั้งหมด):

  • ความสูงและความกว้างของเซลล์ตามค่าเริ่มต้น ความกว้างจะถูกยืดออกไปที่ระยะขอบด้านขวา และความสูงจะถูกตั้งค่าเป็น 0
  • สตริงข้อความที่จะส่งออกค่าเริ่มต้นคือ ""
  • ระบุว่าจะแสดงเส้นขอบรอบเซลล์หรือไม่ซึ่งอาจเป็นตัวเลข (0 = ไม่มีเฟรม, 1 = วาดเฟรม) หรือสตริงที่มีพารามิเตอร์อย่างน้อยหนึ่งพารามิเตอร์จากรายการต่อไปนี้: "L" (ซ้าย), "T" (บนสุด), "R" ( ขวา) และ "B" (ล่าง) ค่าเริ่มต้น: 0
  • ตำแหน่งที่จะวางตำแหน่งปัจจุบันหลังจากแสดงเซลล์ค่าอาจเป็น 0 (ทางด้านขวาของเซลล์), 1 (จุดเริ่มต้นของบรรทัดถัดไป) หรือ 2 (ด้านล่าง) ค่าเริ่มต้น: 0
  • การจัดตำแหน่งข้อความ- ค่าที่เป็นไปได้คือ "L" (จัดชิดซ้าย), "C" (จัดกึ่งกลาง) หรือ "R" (จัดชิดขวา) ค่าเริ่มต้น: "L"
  • พื้นหลังของเซลล์ควรเติมสีหรือไม่ true = เติมสี, false = ทำให้พื้นหลังโปร่งใส ค่าเริ่มต้น: เท็จ
  • ลิงก์ URLหากตั้งค่าไว้ เซลล์ที่มีข้อความจะกลายเป็นลิงก์ที่ใช้งานได้ไปยังแหล่งข้อมูลอื่น

ตอนนี้ใช้เมธอด Cell() แทรกชื่อรายงานและจัดตำแหน่งให้อยู่ตรงกลาง:

$pdf->

การสร้างส่วนท้ายของหน้าและข้อความแนะนำ

ดังนั้นหน้าชื่อเรื่องจึงพร้อมแล้ว ตอนนี้เราจำเป็นต้องสร้างเพจที่มีส่วนท้าย ส่วนหัว และข้อความแนะนำบางส่วน ตามด้วยตารางและกราฟ

มาสร้างส่วนท้ายของหน้ากัน มาเพิ่มหน้าใหม่ จากนั้นแสดงข้อความส่วนหัวที่มีชื่อเรื่องของรายงาน จัดชิดตรงกลางหน้า และใช้แบบอักษร Arial ขนาด 17 เราใช้ตัวแปรการกำหนดค่า $headerColour เพื่อตั้งค่าสีข้อความ:

$pdf->AddPage(); $pdf->SetTextColor($headerColour, $headerColour, $headerColour); $pdf->SetFont("Arial", "", 17); $pdf->เซลล์(0, 15, $reportName, 0, 0, "C");

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

$pdf->SetTextColor($textColour, $textColour, $textColour); $pdf->SetFont("Arial", "", 20); $pdf->Write(19, "2552 เป็นปีที่ดี");

ตอนนี้คุณสามารถแสดงข้อความแนะนำเป็นแบบอักษร Arial ขนาด 12 ได้แล้ว โดยมีช่องว่าง 16 มม. จากย่อหน้าแรก และ 12 มม. ระหว่างย่อหน้า ตั้งค่าความสูงของแต่ละบรรทัดเป็น 6 มม.:

$pdf->Ln(16); $pdf->SetFont("Arial", "", 12); $pdf->Write(6, "แม้ว่าเศรษฐกิจจะตกต่ำ แต่ WidgetCo ก็มีปีที่แข็งแกร่ง ยอดขายของ HyperWidget เกินความคาดหมายเป็นพิเศษ โดยทั่วไปแล้วไตรมาสที่สี่เป็นไตรมาสที่มีผลงานดีที่สุด สาเหตุส่วนใหญ่มาจากการใช้จ่ายโฆษณาที่เพิ่มขึ้นในไตรมาสที่ 3 "); $pdf->Ln(12); $pdf->Write(6, "คาดว่าปี 2553 ยอดขายจะเพิ่มขึ้นเมื่อเราขยายไปยังประเทศอื่นๆ");

เมธอด Write() จะเลื่อนข้อความไปยังบรรทัดถัดไปโดยอัตโนมัติเมื่อไปถึงทางด้านขวาของหน้า

กำลังเพิ่มข้อมูล

ตอนนี้คุณต้องเพิ่มตารางที่มีข้อมูลอยู่ใต้ข้อความ ขั้นแรก มาตั้งค่าสีเส้นขอบตารางกันก่อน เมธอด SetDrawColor() ตั้งค่าสีที่ใช้กับเส้นขอบและเส้นอื่นๆ ดังนั้นเราจึงสามารถใช้เพื่อกำหนดสีให้กับเส้นขอบของเซลล์ตารางได้ จากนั้นเราลดตำแหน่งปัจจุบันลง 15 มม. เพื่อสร้างช่องว่างระหว่างข้อความและตาราง:

$pdf->SetDrawColor($tableBorderColour, $tableBorderColour, $tableBorderColour); $pdf->Ln(15);

การสร้างแถวส่วนหัวของตาราง

ตารางมีแถวที่มีส่วนหัวของคอลัมน์ "PRODUCT", "Q1, "Q2", "Q3" และ "Q4" ในเซลล์ เซลล์ "PRODUCT" ใช้ข้อความและสีพื้นหลังที่แตกต่างจากส่วนหัวอื่นๆ

เราได้ใช้เมธอด SetTextColor() เพื่อตั้งค่าสีข้อความแล้ว หากต้องการตั้งค่าสีพื้นหลัง คุณต้องใช้เมธอด SetFillColor() ซึ่งมีอาร์กิวเมนต์เดียวกันกับ SetTextColor()

หากต้องการสร้างเซลล์ตาราง ให้ใช้เมธอด Cell() ซึ่งกำหนดความกว้างและความสูงของเซลล์ เนื้อหา และการจัดตำแหน่ง นอกจากนี้ การส่ง 1 เป็นอาร์กิวเมนต์ที่ 4 เพื่อตั้งค่าเส้นขอบ และ true เป็นอาร์กิวเมนต์ที่ 7 เพื่อเติมพื้นหลังด้วยสีที่กำหนด

ด้านล่างนี้เป็นโค้ดสำหรับสร้างแถวส่วนหัว แบบอักษรตัวหนาจะถูกตั้งค่าก่อน จากนั้นเซลล์ "ผลิตภัณฑ์" จะถูกสร้างขึ้นโดยมีข้อความและพื้นหลังที่เหมาะสม จากนั้นจะตั้งค่าสีสำหรับเซลล์ส่วนหัวที่เหลืออีก 4 เซลล์และวนซ้ำผ่านองค์ประกอบของอาร์เรย์ $columnLabels เพื่อส่งออกเซลล์โดยให้ข้อความอยู่ตรงกลาง:

// สร้างแถวส่วนหัวของตาราง $pdf->SetFont("Arial", "B", 15); // เซลล์ "ผลิตภัณฑ์" $pdf->SetTextColor($tableHeaderTopProductTextColour, $tableHeaderTopProductTextColour, $tableHeaderTopProductText Color); $pdf->SetFillColor($tableHeaderTopProductFillColour, $tableHeaderTopProductFillColour, $tableHeaderTopProductFillColour); $pdf->เซลล์(46, 12, " ผลิตภัณฑ์", 1, 0, "L", จริง); // เซลล์ส่วนหัวที่เหลืออยู่ $pdf->SetTextColor($tableHeaderTopTextColour, $tableHeaderTopTextColour, $tableHeaderTopTextColour); $pdf->SetFillColor($tableHeaderTopFillColour, $tableHeaderTopFillColour, $tableHeaderTopFillColour); สำหรับ ($i=0; $i เซลล์(36, 12, $columnLabels[$i], 1, 0, "C", จริง); ) $pdf->Ln(12);

ช่องว่างที่จุดเริ่มต้นของเนื้อหาของเซลล์ "ผลิตภัณฑ์" ช่วยเยื้องเซลล์ตารางจากเส้นขอบด้านซ้าย เคล็ดลับเดียวกันนี้จะใช้กับชื่อผลิตภัณฑ์ในคอลัมน์ซ้ายสุด (น่าเสียดายที่ยังไม่มีวิธีควบคุมการเยื้องเซลล์โดยใช้ FPDF)

การสร้างแถวด้วยข้อมูล

ตารางที่เหลือประกอบด้วย 4 แถวพร้อมข้อมูลการขาย (1 แถวต่อผลิตภัณฑ์) เป็นเวลา 4 ไตรมาส ขั้นแรก เรามากำหนดตัวแปรสองสามตัวกัน:

// สร้างแถวที่มีข้อมูล $fill = false; $แถว = 0;

ตัวแปรใช้สำหรับ:

    $fill: เติมสีพื้นหลังของเซลล์หรือไม่ก็ได้ เราจะสลับค่านี้หลังจากที่แต่ละแถวถูกส่งออกเพื่อให้ได้เอฟเฟกต์แถบม้าลายในตาราง

    $row: หมายเลขแถวปัจจุบัน ช่วยให้คุณสามารถแสดงหมายเลขที่สอดคล้องกันสำหรับแต่ละแถวเมื่อคุณเลื่อนไปตามตาราง

ตอนนี้เราสามารถวนซ้ำองค์ประกอบของอาร์เรย์ $data โดยใช้ foreach เพื่อส่งออกแถว สำหรับแต่ละแถว เราจะสร้างเซลล์ด้านซ้ายที่มีชื่อของผลิตภัณฑ์และสี่เซลล์ที่มีข้อมูล ตั้งค่าสีที่เหมาะสมสำหรับข้อความและพื้นหลังสำหรับแต่ละเซลล์

ในการแสดงเซลล์ข้อมูล เราใช้ for loop เพื่อวนซ้ำผ่านอาร์เรย์ข้อมูลสี่องค์ประกอบ และเพื่อแสดงข้อมูลในรูปแบบที่คั่นด้วยหลักพัน เราเรียกฟังก์ชัน PHP number_format()

หลังจากพิมพ์บรรทัดแล้ว ให้เพิ่มตัวแปร $row สลับตัวแปร $fill และใช้ Ln() เพื่อข้ามไปยังจุดเริ่มต้นของบรรทัดถัดไป

นี่คือโค้ดสำหรับลูปทั้งหมด:

Foreach ($data as $dataRow) ( // สร้างเซลล์ด้านซ้ายด้วยส่วนหัวของแถว $pdf->SetFont("Arial", "B", 15); $pdf->SetTextColor($tableHeaderLeftTextColour, $tableHeaderLeftTextColour, $tableHeaderLeftTextColour $pdf->SetFillColor($tableHeaderLeftFillColour, $tableHeaderLeftFillColour, $tableHeaderLeftFillColour); $pdf->เซลล์(46, 12, " " . $rowLabels[$row], 1, 0, "L", $fill); สร้างเซลล์ด้วยข้อมูล $pdf->SetTextColor($textColour, $textColour, $textColour); $pdf->SetFillColor($tableRowFillColour, $tableRowFillColour, $tableRowFillColour); ); สำหรับ ($i=0; $i เซลล์(36, 12, ("$" . number_format($dataRow[$i])), 1, 0, "C", $fill);

) $แถว++;

$เติม = !$เติม;

$pdf->Ln(12); -

การสร้างกราฟ

องค์ประกอบสุดท้ายในรายงานของเราคือกราฟแท่งที่แสดงข้อมูลสรุปของผลิตภัณฑ์ทั้งสี่ตลอดทั้งปี

ในการคำนวณมาตราส่วนแกน Y คุณต้องค้นหามูลค่ารวมของผลิตภัณฑ์แต่ละรายการ จากนั้นจึงกำหนดค่าสูงสุดจากผลิตภัณฑ์เหล่านั้น ค่าสูงสุดสามารถหารด้วยความสูงของพล็อตที่ต้องการเพื่อให้ได้ค่าสเกลแกน Y:

// คำนวณสเกลตามแกน Y $maxTotal = 0; foreach ($data เป็น $dataRow) ( $totalSales = 0; foreach ($dataRow เป็น $dataCell) $totalSales += $dataCell; $maxTotal = ($totalSales > $maxTotal) ? $totalSales: $maxTotal; ) $yScale = $maxTotal / $chartHeight;

เมื่อทราบมาตราส่วนตามแกน X แล้ว คุณก็สามารถคำนวณความกว้าง (เป็นมม.) ของแต่ละคอลัมน์ของกราฟได้ นี่คือค่าผกผันของสเกลแกน X ซึ่งลดลงหนึ่งเท่าครึ่งเพื่อจัดระยะห่างระหว่างคอลัมน์:

// คำนวณความกว้างของคอลัมน์ $barWidth = (1 / $xScale) / 1.5;

การเพิ่มเส้นแกนและป้ายกำกับลงไป

ตอนนี้คุณสามารถเพิ่มเส้นแกน X และ Y ป้ายข้อมูล และป้ายแกนได้แล้ว เราใช้แบบอักษร Arial ขนาด 10 สำหรับป้ายกำกับข้อมูล

หากต้องการวาดเส้นใน FDPF ให้ใช้เมธอด Line() ซึ่งรับอาร์กิวเมนต์สี่ตัว: พิกัด X และ Y ของจุดเริ่มต้นของบรรทัด และพิกัด X และ Y ของจุดสิ้นสุดของบรรทัด

สำหรับแกน X ให้วาดเส้นแนวนอนที่ด้านล่างของกราฟ โดยเว้นระยะ 30 มม. สำหรับป้ายกำกับบนแกน Y ทางด้านซ้าย จากนั้นเราจะส่งออกชื่อผลิตภัณฑ์แต่ละรายการในอาร์เรย์ $rowLabels เป็นเซลล์ข้อความที่จุดที่เหมาะสม:

// เพิ่มแกน: $pdf->SetFont("Arial", "", 10); // แกน X $pdf->เส้น($chartXPos + 30, $chartYPos, $chartXPos + $chartWidth, $chartYPos); สำหรับ ($i=0; $i< count($rowLabels); $i++) { $pdf->SetXY($chartXPos + 40 + $i / $xScale, $chartYPos);

$pdf->เซลล์($barWidth, 10, $rowLabels[$i], 0, 0, "C"); -

เมธอด SetXY() ช่วยให้คุณสามารถกำหนดตำแหน่งปัจจุบันไปยังตำแหน่งที่ต้องการบนเพจได้

สำหรับแกน Y ให้ลากเส้นแนวตั้งไปทางด้านซ้ายของกราฟ โดยเว้นระยะไว้ 30 มม. สำหรับป้ายข้อมูลบนแกน Y ทำให้เส้นแกนมีขนาดใหญ่กว่าความสูงที่ต้องการของกราฟ 8 มม. เพื่อให้มีพื้นที่สำหรับแสดงแกน ฉลาก. จากนั้นเราวนจากศูนย์ถึงค่าข้อมูลสูงสุด $maxTotal ซึ่งถูกกำหนดไว้ก่อนหน้านี้ ขนาดขั้นตอนถูกกำหนดไว้ในตัวแปร $chartYStep (20,000) ในแต่ละขั้นตอน เราจะแสดงค่าปัจจุบันของเส้นจัดชิดขวาและป้ายกำกับสั้นๆ:<= $maxTotal; $i += $chartYStep) { $pdf->// แกน Y $pdf->เส้น($chartXPos + 30, $chartYPos, $chartXPos + 30, $chartYPos - $chartHeight - 8); สำหรับ ($i=0; $i

ตอนนี้คุณสามารถเพิ่มป้ายกำกับแกนได้แล้ว เราใช้แบบอักษรตัวหนา Arial ขนาด 12 เราวางป้ายกำกับแกน X ไว้ใต้ป้ายข้อมูล และป้ายแกน Y ที่ด้านบนของแกน Y:

// เพิ่มป้ายกำกับแกน $pdf->SetFont("Arial", "B", 12); $pdf->SetXY($chartWidth / 2 + 20, $chartYPos + 8); $pdf->เซลล์(30, 10, $chartXLabel, 0, 0, "C"); $pdf->SetXY($chartXPos + 7, $chartYPos - $chartHeight - 12); $pdf->เซลล์(20, 10, $chartYLabel, 0, 0, "R");

การแสดงคอลัมน์กราฟ

ขั้นตอนสุดท้ายคือการสร้างกำหนดการเอง หากต้องการส่งออกคอลัมน์ ให้ใช้วิธี FPDF Rect() ซึ่งจะส่งออกเป็นรูปสี่เหลี่ยมผืนผ้า วิธีการใช้อาร์กิวเมนต์ต่อไปนี้:

  • พิกัด X และ Y ที่มุมซ้ายบนของสี่เหลี่ยมผืนผ้า
  • ความกว้างและความสูงของรูปสี่เหลี่ยมผืนผ้า
  • สไตล์สี่เหลี่ยมผืนผ้าสามารถมีค่า "D" หรือ "" (วาดเส้นขีด), "F" (เติมด้วยสีพื้นหลังปัจจุบัน) หรือ "DF" / "FD" (เส้นขีดและเติม)

ตอนนี้เราแสดงคอลัมน์ มาตั้งค่าตัวแปร $xPos ซึ่งทำหน้าที่ติดตามตำแหน่งปัจจุบันใน X โดยตั้งค่าเป็น 40 มม. โดยคำนึงถึงระยะห่างของป้ายกำกับบนแกน Y และการเยื้องสำหรับคอลัมน์แรก ตอนนี้เรามาสร้างตัวแปร $bar ที่จะมีหมายเลขคอลัมน์ปัจจุบัน สิ่งนี้จะถูกใช้เพื่อกำหนดสีของคอลัมน์:

// สร้างคอลัมน์ $xPos = $chartXPos + 40; $บาร์ = 0;

ตอนนี้เราวนซ้ำอาร์เรย์ $data คำนวณมูลค่ารวมสำหรับแต่ละแถว และพิมพ์คอลัมน์จากแกน X ไปยังค่านั้น โดยปรับขนาดเป็น $yScale สีสำหรับแต่ละคอลัมน์จะเปลี่ยนโดยใช้ตัวนับ $bar ซึ่งเป็นดัชนีในอาร์เรย์ $chartColours หลังจากแสดงคอลัมน์ปัจจุบันแล้ว ให้ย้ายตำแหน่ง X ไปยังจุดเริ่มต้นของคอลัมน์ถัดไป เพิ่มตัวนับ $bar และวนซ้ำต่อไป:

Foreach ($data as $dataRow) ( // คำนวณมูลค่ารวมของแถวข้อมูลสำหรับผลิตภัณฑ์ $totalSales = 0; foreach ($dataRow as $dataCell) $totalSales += $dataCell; // สร้างคอลัมน์ $colorIndex = $bar % นับ ($chartColours[$colorIndex]); $pdf->Rect($xPos, $chartYPos - ( $totalSales / $ yScale), $barWidth, $totalSales / $yScale, "DF"); $xPos += (1 / $xScale);

โค้ดใช้ตัวดำเนินการ PHP โมดูโล (%) เพื่อทำซ้ำสีคอลัมน์ หากจำนวนคอลัมน์เกินจำนวนองค์ประกอบในอาร์เรย์ $chartColours

การส่งเอกสาร PDF ไปยังเบราว์เซอร์

เอกสาร PDF พร้อมแล้ว! สิ่งที่คุณต้องทำก็แค่ส่งมันไปที่บราวเซอร์เพื่อให้ผู้ใช้สามารถดูหรือดาวน์โหลดมันได้

ใช้เมธอด FPDF Output() สำหรับสิ่งนี้ ต้องใช้สองอาร์กิวเมนต์: ชื่อที่ต้องการสำหรับไฟล์ PDF และแฟล็กปลายทาง แฟล็กนี้สามารถรับค่าต่อไปนี้:

    I: ส่งออก PDF ไปที่หน้าจอหากเบราว์เซอร์รองรับฟังก์ชันดังกล่าว ไม่เช่นนั้นจะดาวน์โหลด

    ง: ดาวน์โหลดไฟล์ PDF

    F: บันทึกไฟล์ในโฟลเดอร์บนเซิร์ฟเวอร์

    S: ส่งคืนข้อมูล PDF เป็นสตริง

สำหรับตัวอย่างของเรา ให้ใช้ตัวเลือก I เพื่อส่งออก PDF ไปที่หน้าจอ หากเป็นไปได้:

/*** เอาต์พุต PDF ***/ $pdf->เอาต์พุต("report.pdf", "I"); -

Output() จะส่งส่วนหัว HTTP "Content-type: application/pdf" โดยอัตโนมัติ ซึ่งจะส่งสัญญาณให้เบราว์เซอร์คาดว่าจะได้รับเอกสาร PDF

ตอนนี้คุณพร้อมที่จะทดสอบสคริปต์แล้ว เปิดเบราว์เซอร์ของคุณและไปที่ URL ที่มีสคริปต์อยู่ เช่น www.example.com/report.php คุณควรเห็น PDF ในหน้าต่างเบราว์เซอร์ของคุณ หรือกล่องโต้ตอบจะปรากฏขึ้นเพื่อขอให้คุณบันทึกเอกสาร PDF ลงในฮาร์ดไดรฟ์ของคุณ จากนั้นคุณสามารถเปิดไฟล์ PDF ในโปรแกรมดู PDF เช่น Acrobat Reader หรือ Preview ได้

ในการสร้างเอกสาร PDF คุณจำเป็นต้องมี PHP และ FPDF เท่านั้น

บทสรุป

ในบทช่วยสอนนี้ คุณได้เรียนรู้วิธีใช้ PHP กับไลบรารี FPDF เพื่อสร้างรายงานในรูปแบบ PDF สาธิตวิธีไลบรารี FPDF สำหรับการสร้างข้อความ ตาราง และกราฟ

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

  • การแปล

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

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

PDFlib.pdf
PHP API มีฟังก์ชันจำนวนมากสำหรับการทำงานกับ PDF ซึ่งใช้งานบน PDFlib อย่างไรก็ตาม ห้องสมุดนี้ไม่ฟรีสำหรับใช้ในเชิงพาณิชย์ เวอร์ชันฟรีเรียกว่า PDFlib Lite และให้บริการฟรีสำหรับการใช้งานส่วนตัว แต่มีฟังก์ชันการทำงานที่จำกัด เพื่อที่จะใช้ไลบรารี PDFlib เต็มรูปแบบ คุณต้องซื้อใบอนุญาต

ทำไมต้อง FPDF?
อีกทางเลือกหนึ่งคือการใช้ FPDF ซึ่งเป็นคลาสฟรีที่มีฟังก์ชันจำนวนมากสำหรับการสร้างและจัดการเอกสาร PDF คำสำคัญสำหรับช่วงเวลานี้คือว่ามันฟรี คุณสามารถดาวน์โหลด ใช้งาน และแก้ไขคลาสนี้ได้ตามที่คุณต้องการ นอกจากจะฟรีแล้ว ไลบรารีนี้ยังง่ายกว่า PDFlib มาก หากต้องการใช้ PDFlib คุณต้องติดตั้งเป็นส่วนขยายของ PHP ในขณะที่ FPDF สามารถรวมไว้ในโปรแกรมได้โดยตรง

การสร้างเอกสาร PDF
ในการเริ่มต้น คุณต้องดาวน์โหลดโค้ด FPDF จากเว็บไซต์ FPDF และรวมไว้ในโปรแกรม ตัวอย่างเช่นเช่นนี้


ด้านล่างนี้คือตัวอย่างการใช้ไลบรารีเพื่อสร้าง PDF อย่างง่าย
เราจะสร้างวัตถุ FPDF ใหม่:

ตัวสร้าง FPDF ยอมรับพารามิเตอร์ต่อไปนี้
  • การวางแนวหน้า (P หรือ L) แนวตั้งหรือแนวนอน
  • ขนาด (pt, mm, cm หรือนิ้ว)
  • ขนาดเอกสาร (A3, A4, A5, Letter และ Legal)
ต่อไปเราจะตั้งค่าคุณสมบัติเอกสารบางอย่าง
$pdf->SetAuthor("ลาน่า โควาเซวิช");
$pdf->SetTitle("บทช่วยสอน FPDF");

เนื่องจากในตัวอย่างนี้ เราใช้แบบอักษรเดียวกันสำหรับทั้งเอกสาร เราจึงตั้งค่าไว้ก่อนที่จะสร้างเพจ
$pdf->SetFont("เฮลเวติกา","B",20);
$pdf->SetTextColor(50,60,100);

ฟังก์ชัน SetFont มี 3 พารามิเตอร์ ชื่อแบบอักษร สไตล์ และขนาด เราใช้ Helvetica ตัวหนาและ 20 คะแนน เราจะใช้สำหรับชื่อเอกสาร
คุณสามารถใช้แบบอักษรอื่นได้โดยใช้ฟังก์ชัน AddFont
การใช้ฟังก์ชัน SetTextColor เราตั้งค่าสีแบบอักษรสำหรับทั้งเอกสาร สีสามารถแสดงเป็น RGB หรือระดับสีเทา ในตัวอย่างนี้เราใช้ค่า RGB
เมื่อสิ่งสำคัญเสร็จแล้ว เรามาเริ่มสร้างเพจกันดีกว่า
$pdf->AddPage("P");
$pdf->SetDisplayMode("real","default");

ฟังก์ชัน AddPage() สามารถส่งผ่านพารามิเตอร์ "P" หรือ "L" เพื่อระบุการวางแนวหน้าได้ ฟังก์ชัน SetDisplayMode กำหนดวิธีการแสดงเพจ คุณสามารถกำหนดตัวเลือกการขยายและเค้าโครงได้ ในตัวอย่าง เราใช้กำลังขยาย 100% และเค้าโครงเริ่มต้นที่กำหนดไว้ในโปรแกรมที่ใช้สำหรับการดู

ตอนนี้เรามีเพจแล้ว มาแทรกรูปภาพเพื่อทำให้เพจสวยงามขึ้น และเราจะเพิ่มลิงก์ด้วย เราจะแสดงโลโก้ FPDF โดยใช้ฟังก์ชัน Image และส่งพารามิเตอร์ต่อไปนี้ไปให้ - ชื่อไฟล์ ขนาด และที่อยู่

$pdf->รูปภาพ("/logo.png",10,20,33,0," ","http://www.fpdf.org/");

หากต้องการเพิ่มลิงค์ให้ใช้คำสั่งต่อไปนี้
$pdf->ลิงก์(10, 20, 33,33, "http://www.fpdf.org/");

ตอนนี้เรามาสร้างส่วนหัวด้วยเฟรมกันดีกว่า
$pdf->SetXY(50,20);
$pdf->SetDrawColor(50,60,100);
$pdf->เซลล์(100,10,"บทช่วยสอน FPDF",1,0,"C",0);

ฟังก์ชัน SetXY จะตั้งค่าพิกัด x และ y ของจุดที่เราต้องการแสดงชื่อเรื่อง SetDrawColor ตั้งค่าสีเส้นขอบโดยใช้ค่า RGB หลังจากนั้น เราเรียกใช้ฟังก์ชันเซลล์เพื่อแสดงสี่เหลี่ยมพร้อมข้อความชื่อเรื่องของเรา เราส่งพารามิเตอร์ต่อไปนี้ไปยังฟังก์ชัน: ความกว้าง ความสูง ข้อความ เส้นขอบ ln การจัดตำแหน่ง และช่องว่างภายใน ค่าของเส้นขอบคือ 0 - ไม่มีเส้นขอบ หรือ 1 สำหรับการมีอยู่ของเส้นขอบ สำหรับ ln เราใช้ค่าเริ่มต้นคือ 0, "C" เพื่อจัดข้อความให้อยู่ตรงกลาง และ 0 สำหรับพารามิเตอร์การเติม หากเราตั้งค่าพารามิเตอร์สุดท้ายเป็น 1 สี่เหลี่ยมของเราจะถูกกรอก ค่า 0 จะปล่อยให้โปร่งใส
ตอนนี้เราต้องการเขียนข้อความเล็กๆ ลงในเอกสารของเรา
$pdf->SetXY(10,50);
$pdf->SetFontSize(10);
$pdf->Write(5,"ยินดีด้วย! คุณได้สร้าง PDF แล้ว");

อีกครั้งที่เรากำลังตั้งค่าพิกัด x และ y ของเอาต์พุตข้อความ แต่ตอนนี้เราจะลดขนาดตัวอักษรโดยใช้ SetFontSize ฟังก์ชั่น Write จะพิมพ์ข้อความลงในเอกสารของเรา พารามิเตอร์ 5 ตั้งค่าความสูง ซึ่งจะสมเหตุสมผลเมื่อเรามีหลายบรรทัดในข้อความเท่านั้น
ในตอนท้ายเราส่งออกผลลัพธ์โดยใช้ฟังก์ชัน Output
$pdf->Output("example1.pdf","I");

ที่นี่เราระบุชื่อไฟล์และพารามิเตอร์เอาต์พุต ในกรณีนี้คือ "I" พารามิเตอร์ "I" จะส่งผลลัพธ์ไปยังเบราว์เซอร์

ดังนั้นข้อความเต็ม:

ต้องการ("fpdf.php");
//สร้างวัตถุ FPDF
$pdf=FPDF ใหม่();
//กำหนดคุณสมบัติของเอกสาร
$pdf->SetAuthor("ลาน่า โควาเซวิช");
$pdf->SetTitle("บทช่วยสอน FPDF");
//กำหนดฟอนต์ให้ทั้งเอกสาร
$pdf->SetFont("เฮลเวติกา","B",20);
$pdf->SetTextColor(50,60,100);
//ตั้งเพจ
$pdf->AddPage("P");
$pdf->SetDisplayMode(real,"default");
//ใส่รูปภาพและทำให้เป็นลิงค์
$pdf->รูปภาพ("/logo.png",10,20,33,0," ","http://www.fpdf.org/");
//แสดงชื่อโดยมีเส้นขอบล้อมรอบ
$pdf->SetXY(50,20);
$pdf->SetDrawColor(50,60,100);
$pdf->เซลล์(100,10,"บทช่วยสอน FPDF",1,0,"C",0);
//กำหนดตำแหน่ง x และ y สำหรับข้อความหลัก ลดขนาดตัวอักษร และเขียนเนื้อหา
$pdf->SetXY(10,50);
$pdf->SetFontSize(10);
$pdf->Write(5,"ยินดีด้วย! คุณได้สร้าง PDF แล้ว");
//ส่งออกเอกสาร
$pdf->Output("example1.pdf","I");

ตอนนี้เราได้เรียนรู้วิธีสร้างเอกสารแล้ว มาดูกันว่าเราสามารถทำอะไรได้อีกโดยใช้ FPDF ตัวอย่างด้านล่างแสดงวิธีการสร้างด้านบนและด้านล่าง (ส่วนหัวและส่วนท้าย :-)) ของเอกสารของเรา

ต้องการ("fpdf.php");
คลาส PDF ขยาย FPDF
{
ฟังก์ชันส่วนหัว()
{
$นี่->รูปภาพ("/logo.png",10,8,33);
$this->SetFont("เฮลเวติกา","B",15);
$นี่->SetXY(50, 10);
$this->Cell(0,10,"นี่คือส่วนหัว",1,0,"C");
}
ฟังก์ชั่นส่วนท้าย ()
{
$นี่->SetXY(100,-15);
$this->SetFont("เฮลเวติกา","ฉัน",10);
$this->Write(5, "นี่คือส่วนท้าย");
}
}
$pdf=ไฟล์ PDF ใหม่();
$pdf->AddPage();
$pdf->Output("example2.pdf","D");

อย่างที่คุณเห็น เราได้สร้างคลาสย่อยโดยใช้การสืบทอดและสร้างฟังก์ชันส่วนหัวและส่วนท้าย จากนั้นเราสร้างวัตถุใหม่และเพิ่มหน้าลงในเอกสาร ฟังก์ชัน AddPage จะเรียกใช้ฟังก์ชัน Header และ Footer โดยอัตโนมัติ สุดท้าย เราจะส่งออกข้อมูลผลลัพธ์ไปยังไฟล์ชื่อ example2.pdf โดยใช้ค่า "D" ในกรณีนี้เบราว์เซอร์จะเสนอให้บันทึกไฟล์นี้

ดังนั้นเราจึงได้เรียนรู้พื้นฐานของการสร้างเอกสาร PDF เพื่อดูรายละเอียดเพิ่มเติม



2024 wisemotors.ru. วิธีนี้ทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล