1. Code
  2. PHP

Menghasilkan PDF dengan PHP

Scroll to top

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

PDF mungkin merupakan format terbaik untuk mendistribusikan dokumen di web. Dalam tutorial hari ini, saya akan menunjukkan bagaimana Anda bisa menghasilkan PDF dengan PHP. Mari kita lakukan!


Mempercepat

Ada sejumlah metode yang bisa Anda gunakan untuk membuat PDF dengan PHP. Anda bisa menggunakan pustaka PDFlib, tapi itu agak mahal, setidaknya untuk pekerjaan komersial. Hari ini, kita akan bekerja dengan pustaka FPDF, yang gratis untuk penggunaan pribadi dan komersial, dan sama sekali tidak sulit untuk digunakan.

Untuk memulai, kunjungi situs FPDF dan klik downloads di sebelah kiri. Di bawah semua manualnya, dapatkan arsip zip versi 1.6 (meskipun sudah lama sejak update terakhir, forum di situs ini masih cukup aktif). Unzip file; yang Anda butuhkan dari folder ini adalah file fpdf.php dan direktori font.

Mari kita lakukan contoh "Hello, World!" untuk mempercepat kita. Tentu saja, hal pertama yang harus Anda lakukan adalah require pustakanya; kemudian, kita membuat instance baru dari kelas FPDF.

hello_world.php

1
 
2
  require('fpdf/fpdf.php'); 
3
 
4
	$pdf = new FPDF('P', 'pt', 'Letter');

Perhatikan bahwa kami menyampaikan tiga nilai pada constructor FPDF; yang pertama adalah orientasi halaman kita; dalam kasus kita, adalah portrait (Anda juga bisa melakukan 'L'andscape). Parameter berikutnya adalah tipe unit yang ingin kita gunakan; kami memilih points, karena itulah ukuran font yang akan diukur; kita bisa memilih mm, cm, atau in. Akhirnya, kita memiliki format kertas, yang telah kami jelaskan sebagai letter; kita bisa mengaturnya Legal, A3, A4, atau A5. Ketiga parameter ini adalah pilihan; defaultnya adalah ('P', 'mm', 'A4').

Sebelum kita bisa menambahkan teks ke dokumen kita, kita perlu melakukan dua hal: 1) menambahkan halaman ke pdf, dan 2) menetapkan font.

1
 
2
	$pdf->AddPage(); 
3
	$pdf->SetFont('Arial', '', 12);

Anda juga dapat menggunakan AddPage kapan pun Anda ingin memasukkan jeda halaman; pertama kita atur jenis font; ini bisa menjadi salah satu keluarga font bawaan (Courier, Helvetica/Arial, Times, Symbol, ataur ZapfDingbats) atau yang Anda tambahkan dengan metode AddFont. Berikutnya adalah format font; kami telah menetapkannya sebagai regular, tapi kami bisa melakukannya 'B'old,' I'talic, 'U'nderline, atau pengelompokan mereka ('BUI'). Akhirnya, kita atur ukuran font dalam point.

Sekarang kita siap menambahkan beberapa teks. Semua teks yang Anda tulis dalam PDF Anda akan ditulis di dalam cell.

1
 
2
	$pdf->Cell(100, 16, "Hello, World!");

Jadi apa yang dilakukan ini? Parameter pertama adalah lebar sel; yang kedua adalah tingginya. Tentu saja, yang ketiga adalah teks untuk cell. Ada beberapa parameter lainnya, tapi pertama, mari kita lihat bagaimana tampilannya. Untuk menyelesaikan PDF, mari kita gunakan metode outputnya.

1
 
2
	$pdf->Output();

Kita bisa memberi metode ini dua parameter, tapi untuk saat ini kita akan membiarkannya saja. Seperti sekarang, PDF akan ditampilkan saat kita mengunjungi halamannya. Jadi mari kita lakukan itu sekarang juga! Inilah yang saya dapatkan:


Kerja bagus! Anda telah membuat PDF pertama Anda. Mari kembali ke baris yang menciptakan cell teks dan membuat perubahan:

1
 
2
	$pdf->Cell(100, 16, "Hello, World!", 1);

Kami telah menambahkan parameter keempat; itu adalah border. Dalam kasus kami, kami telah membuat border di sekelilingnya. Anda bisa melakukan border parsial dengan sebuah string: "LB" akan menambahkan border di kiri dan bawah; "TLBR" sama dengan 1.

Jika Anda me-reload halaman sekarang dan Anda merasa tidak ada yang terjadi, cukup tambahkan string kueri acak ke URL untuk memaksa refresh-nya.

Kami akan segera membuat skrip yang menghasilkan tanda terima, tapi mari kita lihat bagaimana mengatur beberapa pilihan terlebih dahulu.


Screencast Penuh

Please accept preferences cookies to load this content.


SetFillColor / SetTextColor

Anda bisa mengisi cell teks dengan warna latar belakang; kita akan melihat bagaimana melakukannya di aplikasi kita, tapi pertama-tama Anda harus mengatur warna isi. Sampaikan saja fungsi ini nilai red, green, dan blue (antara 0 dan 255). Anda bisa mengatur warna teks dengan cara yang sama.

1
 
2
	$pdf->SetFillColor(36, 96, 84); 
3
	$pdf->SetTextColor(255);

Jika Anda ingin menetapkan ketiga warna ke nilai yang sama, cukup gunakan satu parameter.

SetLineWidth

Saat menggambar border pada cell, tidak sulit untuk menyesuaikan lebar border-nya. Cukup panggil metode ini, sampaikan di float; ingat, Anda menetapkan unit pengukuran Anda saat Anda membuat instance FPDF. Saat Anda mulai, border-nya selebar 0.2mm.

1
 
2
	$pdf->SetLineWidth(1);

SetAuthor / SetTitle / SetSubject / SetCreator / SetKeywords

Metode ini untuk menetapkan properti PDF, meta data-nya. Masing-masing mengambil string dengan konten yang sesuai. Mereka juga dapat mengambil boolean opsional, yang menentukan enkodenya: true adalah UTF-8 dan false adalah ISO-8859-1.

1
 
2
	$pdf->SetAuthor("Collis and Cyan Ta'eed"); 
3
	$pdf->SetTitle("How to be a Rockstar Freelancer"); 
4
	$pdf->SetSubject("Freelancing"); 
5
	$pdf->SetKeywords("Freelance Brand Project Contract Marketing Clients"); 
6
	$pdf->SetCreator("EnvatoEdit"); // creator is usually the application that generated the PDF

SetMargins / SetTopMargin / SetLeftMargin / SetRightMargin

Secara default, margin halaman Anda adalah 1 cm. Anda dapat mengatur margin atas, kiri, dan kanan secara terpisah dengan fungsi masing-masing, atau menetapkan semuanya sekaligus.

1
 
2
	$pdf->SetMargins(40, 35, 20); 
3
	// is eqaul to 

4
	$pdf->SetTopMargins(40); 
5
	$pdf->SetLeftMargin(35); 
6
	$pdf->SetRightMargin(20);

Tapi bagaimana dengan margin bawah? Saya senang Anda bertanya, itu diurus oleh fungsi lain.

SetAutoPageBreak

Fungsi ini mengambil boolean, menentukan apakah Anda ingin pustakanya menambahkan jeda halaman bila diperlukan atau apakah Anda ingin melakukannya secara manual. Jika nilainya true (default-nya), Anda dapat menambahkan parameter kedua yang menentukan seberapa dekat yang ingin Anda dapatkan sebelum menjeda. Secara default, ini adalah 2 cm.

1
 
2
	$pdf->SetAutoPageBreak(false); // I'll have to add page breaks myself 

3
	$pdf->SetAutoPageBreak(true, 40); // Pages with auto-break, with a bottom margin of 40 pts.

Menghasilkan Tanda Terima

Sekarang setelah kita mendapatkan kebaikan dari menghasilkan PDF di bawah ikat pinggang kita, mari kita mulai aplikasi kecil kita. Kita akan mulai dengan membuat form HTML. Saat pengguna mengklik 'submit', kita akan mengambil nilai dari form dan menggunakannya untuk membuat tanda terima bagi pelanggan kita.

Pertama-tama, sedikit kerangka HTML:

1
 
2
	<!DOCTYPE html> 
3
	<html> 
4
	<head> 
5
	    <meta charset='utf-8' /> 
6
	    <title>Invoice Form</title> 
7
	    <link rel="stylesheet" href="style.css" /> 
8
	</head> 
9
	<body> 
10
	<div id="wrap"><div> 
11
	    <h1>Checkout</h1> 
12
	    <form method="post" action="create_reciept.php"> 
13
 
14
	    </form> 
15
	</div></div>

Anda dapat melihat bahwa kami telah menyiapkan form, yang akan dikirim ke create_reciept.php, yang akan segera kita buat. Mari menambahkan fieldset dan mengenakannya dengan elemen untuk informasi pribadi pelanggan kita.

index.html

1
 
2
	<fieldset> 
3
		<legend>Personal Information</legend> 
4
		<div class="col"> 
5
			<p> 
6
				<label for="name">Name</label> 
7
				<input type="text" name="name" value="John Doe" /> 
8
			</p> 
9
			<p> 
10
				<label for="email">Email Address</label> 
11
				<input type="text" name="email" value="joh@doe.com" /> 
12
			</p> 
13
		</div> 
14
		<div class="col"> 
15
			<p> 
16
				<label for="address">Address</label> 
17
				<input type="text" name="address" value="123 Main Street" /> 
18
			</p> 
19
			<p> 
20
				<label for="city">City</label> 
21
				<input type="text" name="city" value="Toronto" /> 
22
			</p> 
23
			<p> 
24
				<label for="province">Province</label> 
25
				<input type="text" name="province" value="Ontario" /> 
26
			</p> 
27
			<p> 
28
				<label for="postal_code">Postal Code</label> 
29
				<input type="text" name="postal_code" value="A1B 2C3" /> 
30
			</p> 
31
			<p> 
32
				<label for="country">Country</label><input type="text" name="country" value="Canada" /> 
33
			</p> 
34
	    </div> 
35
	</fieldset>

Catat dua hal: kita akan melihat styling untuk .col saat kita sampai ke CSS; itu akan memungkinkan kita untuk mengatur field ini dalam dua kolom. Kedua, saya telah memberikan semua nilai input, hanya untuk menghemat waktu kita nantinya.

Kita akan menambahkan fieldset lain untuk produk yang dibeli pelanggan:

1
 
2
	<fieldset> 
3
	    <legend>Purchases</legend> 
4
	    <table> 
5
	        <thead> 
6
	            <tr><td>Product</td><td>Price</td></tr> 
7
	        <thead> 
8
	        <tbody> 
9
				<tr> 
10
					<td><input type='text' value='a neat product' name='product[]' /></td> 
11
					<td>$<input type='text' value='10.00' name='price[]' /></td> 
12
				</tr> 
13
				<tr> 
14
					<td><input type='text' value='something else cool' name='product[]' /></td> 
15
					<td>$<input type='text' value='9.99' name='price[]' /></td> 
16
				</tr> 
17
				<tr> 
18
					<td><input type='text' value='buy this too!' name='product[]' /></td> 
19
					<td>$<input type='text' value='17.85' name='price[]' /></td> 
20
				</tr> 
21
				<tr> 
22
					<td><input type='text' value='And finally this' name='product[]' /></td> 
23
					<td>$<input type='text' value='5.67' name='price[]' /></td> 
24
				</tr> 
25
	        </tbody> 
26
	    </table> 
27
	</fieldset>

Menurut saya informasi yang kami tunjukkan di sini sesuai untuk sebuah tabel, jadi itulah yang kami gunakan. Juga, saya telah meletakkan satu set tanda kurung siku di akhir nama input; perhatikan bahwa kita memiliki satu set input yang diberi nama product[] dan satu set bernama price[]. Ini akan diposting sebagai array.

Tentu saja, form kita diakhiri dengan tombol submit.

1
 
2
	<button type="submit">Submit Order</button>

Sekarang kita bisa beralih ke CSS. Kami tidak akan membahas ini secara rinci, tapi tidak ada yang menyulitkan sama sekali. Anda bisa memasukkannya ke style.css, yang kami tautkan di HTML.

style.css

1
 
2
	      body { 
3
	        font: 13px/1.5 'Helvetica Neue', Arial, 'Liberation Sans', FreeSans, sans-serif; /* 960.gs */ 
4
	        background:#ececec; 
5
	    } 
6
	    .col { 
7
	        width:50%; 
8
	        float:left; 
9
	    } 
10
	    fieldset { 
11
	        border:1px solid #474747; 
12
	        -moz-border-radius:5px; 
13
	        -webkit-border-radius:5px; 
14
	        margin-bottom:10px; 
15
	    } 
16
	    legend { 
17
	        background:#474747; 
18
	        color:#fff; 
19
	        padding:3px 15px; 
20
	        -moz-border-radius:5px; 
21
	        -webkit-border-radius:5px; 
22
	        font-weight:bold; 
23
	    } 
24
	    #wrap { 
25
	        width:820px; 
26
	        padding:20px; 
27
	        margin:20px auto; 
28
	        background:#fff; 
29
	        border:1px solid #ccc; 
30
	        -moz-border-radius:10px; 
31
	        -webkit-border-radius:10px; 
32
	    } 
33
	    p { 
34
	        padding:2px; 
35
	    } 
36
	    label { 
37
	        display:inline-block; 
38
	        width:100px; 
39
	        font-weight:bold; 
40
	    } 
41
	    label:after { 
42
	        content: ":"; 
43
	    } 
44
	    input { 
45
	        display:inline-block; 
46
	        width:200px; 
47
	        border:1px solid #ccc; 
48
	        padding:5px; 
49
	        margin:0; 
50
	        -moz-border-radius:5px; 
51
	        -webkit-border-radius:5px; 
52
	    } 
53
	    thead  td { 
54
	        text-align:center; 
55
	        font-weight:bold; 
56
	    } 
57
	    td + td > input { 
58
	        width:50px; 
59
	    } 
60
	    button { 
61
	        border:1px solid #474747; 
62
	        background:#ccc; 
63
	        -moz-border-radius:5px; 
64
	        -webkit-border-radius:5px; 
65
	        padding:10px; 
66
	        margin:10px; 
67
	        font-weight:bold; 
68
	        font-size:200%; 
69
	    } 
70
	    button:hover { 
71
	        background:#ececec; 
72
	        cursor:pointer; 
73
	    }

Seperti yang bisa Anda lihat, kami memberi sebagian besar elemen-elemen beberapa gaya minimalis; tidak ada yang menggemparkan, tapi akan ringan dilihat. Inilah tampilan form kita:


Jadi, saat pelanggan kita mengisi form dan mengklik submit, data dari form akan diposkan ke create_reciept.php. Jadi mari kita membuat file-nya sekarang juga!


Pembuat Tanda Terima

Kita kembali ke PHP sekarang. Hal pertama yang pertama: mendapatkan pustakanya:

1
 
2
	require('fpdf/fpdf.php');

Selanjutnya, bukannya membuat sebuah instance dari kelas FPDF, kita akan memperluasnya dengan kelas kita sendiri. Ini akan memungkinkan kita melakukan beberapa hal bagus. Perhatikan sekarang juga:

1
 
2
	class PDF_reciept extends FPDF { 
3
	    function __construct ($orientation = 'P', $unit = 'pt', $format = 'Letter', $margin = 40) { 
4
	        $this->FPDF($orientation, $unit, $format); 
5
	        $this->SetTopMargin($margin); 
6
	        $this->SetLeftMargin($margin); 
7
	        $this->SetRightMargin($margin); 
8
	        $this->SetAutoPageBreak(true, $margin); 
9
	    } 
10
	}

Kita telah memulai kelas baru kita dengan menulis sebuah constructor. Kita telah memberikan semua parameter nilai default sehingga constructor kita dapat dipanggil tanpa mereka. Di dalam fungsinya, kita memanggil constructor kelas induk kita, dan kemudian mengatur marginnya.

Sekarang kita membahas dua fungsi khusus: Header dan Footer.

1
 
2
	function Header() { 
3
	    $this->SetFont('Arial', 'B', 20); 
4
	    $this->SetFillColor(36, 96, 84); 
5
	    $this->SetTextColor(225); 
6
	    $this->Cell(0, 30, "Nettuts+ Online Store", 0, 1, 'C', true); 
7
	}

Fungsi ini akan dijalankan di awal setiap halaman PDF kita. Pertama-tama kita menetapkan font, warna isi, dan warna teks. Kemudian, kita mengeluarkan cell kita. Perhatikan bahwa kami telah menetapkan lebar ke 0. Ini adalah nilai khusus; cell akan mengambil semua ruang di sebelah kanan dari titik awal (sampai menyentuh margin kanan). Karena kita mulai dari margin kiri, kita akan mendapatkan cell pada seluruh lebar halaman (dikurangi margin).

Sekarang untuk fungsi Footer:

1
 
2
	function Footer() { 
3
	    $this->SetFont('Arial', '', 12); 
4
	    $this->SetTextColor(0); 
5
	    $this->SetXY(0,-60); 
6
	    $this->Cell(0, 20, "Thank you for shopping at Nettuts+!", 'T', 0, 'C'); 
7
	}

Sekali lagi, kita mulai dengan mengatur warna font dan teks; kita tidak bisa memastikan nilai-nilai apa yang akan terjadi saat kita sampai di header, jadi kita akan mengaturnya hanya untuk memastikannya. Selanjutnya kita menentukan koordinat X dan Y. Ini menentukan posisi pojok kiri atas dari cell berikutnya. Kita menetapkan X ke 0, hanya untuk memastikan kita berada di awal baris. Kita menetapkan Y ke -60; angka negatif adalah relatif terhadap bagian bawah halaman, jadi ini menentukan kursor kita 60 piksel di atas bagian bawah.

Selanjutnya, kita membuat cell; sekali lagi, kita menggunakan trik lebar-0; kita atur tinggi sampai 20pt. Kita menetapkan teksnya, memberikannya border atas, dan meletakkan teks di tengah. Itu saja!

Kita akan kembali ke kelas kita lagi, tapi untuk saat ini, mari mulai membangun tanda terimanya. Setelah membuat sebuah instance dari kelas kita, menambahkan sebuah halaman, dan mengatur font, kita bisa mulai bekerja.

1
 
2
	$pdf = new PDF_receipt(); 
3
	$pdf->AddPage(); 
4
	$pdf->SetFont('Arial', '', 12);

Hal pertama yang akan kita lakukan adalah menggerakkan kursor kita; kita bisa melakukannya dengan menggunakan metode SetY.

1
 
2
	$pdf->SetY(100);

Ini tidak menurunkan kita 100 poin; ini adalah menetapkan 100 poin dari bagian atas halaman. Itu tidak termasuk marginnya, jadi kita turun 30pt dari dasar header kita.

1
 
2
	$pdf->Cell(100, 13, "Ordered By"); 
3
	$pdf->SetFont('Arial, ''); 

4
	$pdf->Cell(100, 13, $_POST['name']);

Kita mulai dengan membuat cell yang lebar 100pt dan tinggi 13pt, dengan teks "Dipesan oleh." Selanjutnya, kita atur ulang font untuk menghilangkan huruf tebalnya. Kemudian kita membuat cell lain, dan memberikan nama yang kita dapatkan dari form kita. Tentu saja, dalam proyek nyata, Anda akan memeriksa nilai-nilai tersebut sebelum menggunakannya.

Selanjutnya, kita akan menambahkan tanggal pembelian:

1
 
2
	$pdf->SetFont('Arial', 'B', 12); 
3
	$pdf->Cell(50, 13, 'Date'); 
4
	$pdf->SetFont('Arial', ''); 
5
	$pdf->Cell(100, 13, date('F j, Y'), 0, 1);

Sekali lagi, kita mengatur font menjadi huruf tebal; setelah menulis "Date," kita menghapus huruf tebal dan mencetak tanggal saat ini, dengan menggunakan fungsi date PHP. Format yang kami tentukan akan memberi kita nama bulan, nomor hari diikuti dengan koma, dan empat digit tahun. Kami menempatkan border menjadi 0 (default) sehingga kita bisa sampai ke parameter baris. Kami menetapkannya sebagai 1, yang akan menempatkan posisi kita ke awal baris berikutnya; Ini setara dengan menekan 'enter' dalam pengolah kata.

Bergerak . . .

1
 
2
	$pdf->SetX(140); 
3
	$pdf->SetFont('Arial', 'I'); 
4
	$pdf->Cell(200, 15, $_POST['address'], 0, 2); 
5
	$pdf->Cell(200, 15, $_POST['city'] . ', ' . $_POST['province'], 0, 2); 
6
	$pdf->Cell(200, 15, $_POST['postal_code'] . ' ' . $_POST['country']); 
7
	$pdf->Ln(100);

Fungsi SetX melakukan hal yang sama dengan fungsi SetY, kecuali bahwa itu menempatkan kita keluar dari kanan. Kita menempatkan posisi kanan 100pt dari margin kiri. Selanjutnya, kami membuat font miring dan mulai menampilkan alamat. Semua tiga baris alamat dengan lebar 200pt dan tinggi 15pt. Yang penting untuk diperhatikan disini adalah parameter baris kami adalah 2. Ini berarti bahwa setelah setiap cell, kita akan beralih ke baris berikutnya dan 'tab in' untuk sejajar dengan cell sebelumnya. Akhirnya, kita memanggil metode Ln, yang menambahkan jeda baris. Tanpa parameter, ia akan memindahkan posisi kita ke posisi puncak cell yang tercetak terakhir. Kita telah menyampaikan parameter, jadi kita turun 100pt.

Inilah yang kita dapatkan sejauh ini:


image : address / date

Sekarang mari kita cetak sebuah tabel dari produk yang telah dibeli pelanggan kita.

1
 
2
	$pdf->PriceTable($_POST['product'], $_POST['price']);

Kita telah menyampaikan dua array yang kita dapatkan dari file HTML kita. Tapi darimana metode PriceTable ini berasal? Kita akan membuatnya sekarang juga, di dalam kelas PDF_receipt kita. Itu adalah keuntungan lain dari memperluas kelas: kita dapat menangkap fungsionalitas yang berpotensi melelahkan dalam sebuah metode.

1
 
2
	    function PriceTable($products, $prices) { 
3
	    $this->SetFont('Arial', 'B', 12); 
4
	    $this->SetTextColor(0); 
5
	    $this->SetFillColor(36, 140, 129); 
6
	    $this->SetLineWidth(1); 
7
	    $this->Cell(427, 25, "Item Description", 'LTR', 0, 'C', true); 
8
	    $this->Cell(100, 25, "Price", 'LTR', 1, 'C', true); 
9
 
10
	    $this->SetFont('Arial', ''); 
11
	    $this->SetFillColor(238); 
12
	    $this->SetLineWidth(0.2); 
13
	    $fill = false; 
14
 
15
	    for ($i = 0; $i < count($products); $i++) { 
16
	        $this->Cell(427, 20, $products[$i], 1, 0, 'L', $fill); 
17
	        $this->Cell(100, 20, '$' . $prices[$i], 1, 1, 'R', $fill); 
18
	        $fill = !$fill; 
19
	    } 
20
	    $this->SetX(367); 
21
	    $this->Cell(100, 20, "Total", 1); 
22
	    $this->Cell(100, 20, '$' . array_sum($prices), 1, 1, 'R'); 
23
	}

Inilah fungsinya. Kita mulai dengan mengatur font, warna teks, warna isi, dan lebar baris kita. Selanjutnya kita mengatur cell header kita. Masing-masing memiliki border di sebelah kiri, atas, dan kanan, teks di tengah, dan isian.

Selanjutnya, kita menghapus 'ketebalan' dari font dan mengatur ulang warna isi dan lebar baris. Kita juga membuat variabel $fill, ditetapkan ke false. Kita akan menggunakan ini untuk menambahkan strip zebra ke tabel kita.

Loop-for berjalan melalui array produk dan harga (mereka harus memiliki jumlah item yang sama, berdasarkan tabel dalam file HTML kita). Kita membuat cell untuk setiap entri, memasukkan nama produk di bawah header "Item Description" dan harga di bawah header "Price". Mereka berdua memiliki border. Produknya dibiarkan rata kiri, harganya rata kanan. Akhirnya, keduanya menggunakan $fill, yang saat ini bernilai false. Setelah setiap baris, kita mengganti nilai $fill ke boolean yang berlawanan, jadi baris berikutnya akan memiliki latar belakang abu-abu.

Setelah kita loop melewati semua pembelian, kita ingin memberikan harga total. Kita akan menemukan kursor kita dari tepi kiri halaman. Kemudian kita membuat cell "Total", dan akhirnya, kita menggunakan fungsi php array_sum untuk menambahkan semua harga di $prices. Dan itulah tabel harga!

Kembali ke body PDF kita, kita sekarang akan melewati 50pt.

1
 
2
	$pdf->Ln(50);

Sejauh ini, kita hanya menggunakan fungsi Cell untuk mencetak ke halaman kita. Ada dua metode lain yang bisa kita gunakan juga: MultiCell dan Write. Kedua fungsi ini adalah untuk baris teks yang terlalu panjang untuk cell lebar-penuh tunggal. Mari kita lihat MultiCell terlebih dahulu.

MultiCell sangat mirip dengan Cell, kecuali saat menyentuh lebar yang telah Anda tentukan untuk cell, ia akan membuat yang lain di bawahnya dan terus menulis. Ini juga akan menjeda saat menyentuh '\n'. Karena itu, tidak diperlukan parameter properti baris. Ini juga tidak memiliki parameter tautan link seperti Cell. Apa? Kami belum menyebutkan parameter tautan? Nah, Cell bisa mengambil satu parameter lagi, setelah parameter pengisian: itu adalah string tautan, atau objek tautan yang mengarah ke titik lain dalam PDF, yang dibuat dengan fungsi AddLink.

1
 
2
	$message = "Thank you for ordering at the Nettuts+ online store. Our policy is to ship your materials within two business days of purchase. On all orders over $20.00, we offer free 2-3 day shipping. If you haven't received your items in 3 busines days, let us know and we'll reimburse you 5%.\n\nWe hope you enjoy the items you have purchased. If you have any questions, you can email us at the following email address:"; 
3
	$pdf->MultiCell(0, 15, $message);

Teksnya tidak terlalu penting, tapi terlalu panjang juga saat masuk satu baris; ditambah, ia memiliki beberapa jeda baris di dalamnya. Meskipun kita tidak menggunakannya di sini, MultiCell juga menggunakan parameter border, alignment, dan fill.

Metode Write hanya mengambil tiga parameter: tinggi, teks, dan tautan opsional. Tidak ada parameter lebar, karena akan mengarah ke margin kanan sebelum mengenai batasnya. Meskipun ini bukan penggunaan terbaiknya, kami akan menggunakannya untuk menambahkan tautan:

1
 
2
	$pdf->SetFont('Arial', 'U', 12); 
3
	$pdf->SetTextColor(1, 162, 232); 
4
 
5
	$pdf->Write(13, "store@nettuts.com", "mailto:example@example.com");

Perhatikan bahwa kita mengatur warna font dan teks sebelum menulis, sehingga terlihat seperti sebuah link.

Itu saja untuk PHP-nya. Mari menambahkan satu fitur lagi: kita akan mengirimkan form dengan Ajax. Sebelum kembali ke index.html, buat perubahan ini untuk untuk panggilan ke Output:

1
 
2
	$pdf->Output('reciept.pdf', 'F');

Parameter pertama adalah nama file kita; Yang kedua adalah apa yang ingin kita lakukan dengan file tersebut, dalam kasus ini, simpan ke server. Anda juga bisa memaksa download dengan 'D', mengembalikan sebagai string dengan 'S'. Default-nya, keluaran ke browser, adalah 'I' (untuk inline).

Kembali ke HTML, mari impor jQuery dan tambahkan handler click ke tombol submit:

1
 
2
	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script> 
3
	<script type="text/javascript"> 
4
	$('button').click(function () { 
5
	    $.post('create_reciept.php', $('form').serialize(), function () { 
6
	        $('div#wrap div').fadeOut( function () { 
7
	            $(this).empty().html("<h2>Thank you!</h2><p>Thank you for your order. Please <a href='reciept.pdf'>download your reciept</a>. </p>").fadeIn(); 
8
	        }); 
9
	    }); 
10
	    return false; 
11
	}); 
12
	</script>

Saat tombol diklik, kita kirimkan form-nya. Setelah mengembalikan sukses, kita memudarkan div kedua keluar, mengosongkan isinya dan memuatnya kembali menggunakan fungsi HTML. HTML baru itu memiliki tautan untuk tanda terima. Lalu kita memudarkan div masuk kembali. Jangan lupa untuk mengembalikan false agar formulir tidak dikirim secara normalnya.

Inilah yang kita dapatkan


Dan inilah PDF akhir kita.


Dan hanya itu, kawan! Tekan komentar dengan ucapan atau saran!