Hình ảnh php sang pdf

Hiện nay, có rất nhiều ứng dụng web đưa ra các tài liệu văn bản dưới dạng hóa đơn, hợp đồng hoặc chỉ là một trang web dưới dạng PDF. Có một số lớp PHP có thể sử dụng để tạo tệp PDF trực tuyến và một số trong đó là TCPDF. Bài hướng dẫn này sẽ chỉ cho bạn thấy cách nào để sử dụng lớp TCPDF khi tạo một đơn hóa đơn giản

Hình ảnh php sang pdf

Tại sao lại là TCPDF mà không phải là một lớp PDF khác?

TCPDF được dựa trên lớp FPDF, một cơ sở dự án được viết dựa trên PHP4. Sau một vài năm, TCPDF phát triển và có nhiều tính năng hơn FPDF và được viết trên PHP5 (đương nhiên là cả trên PHP4). TCPDF một số bộ tài liệu khá tuyệt vời và đương nhiên là có cả ví dụ cho tất cả các công việc bạn có thể làm với PDF nữa, chẳng hạn như. Hỗ trợ WriteHTML và RTL, Nhiều cột, Javascript và Biểu mẫu, Dấu trang (Mục lục), Căn chỉnh phức hợp nhiều ô, Mã vạch, Đặt tùy chọn hiển thị trình xem PDF, hình ảnh vector EPS/AI và nhiều cái nữa

Zend Framework cũng có lớp PDF

Đúng vậy, kế hoạch đầu tiên đó là viết bài hướng dẫn này với Zend Framwork, nhưng sau khi viết có một vài dòng mã tôi nhận ra rằng lớp PDF bị thiếu một số chức năng quan trọng, như MultiCell, được sử dụng để bọc . MultiCell yêu cầu một vài chức năng mà tôi đoán rằng nó là Zend_Pdf_Cell cách đây 2 năm và tôi không thể tìm thấy bất kỳ công việc nào đang làm với phiên bản lõi cho đến tận bây giờ. Tôi rất thích Zend Framework nhưng không phải với việc tạo tệp PDF, lớp PDF của Zend có quá nhiều hạn chế.

Hình ảnh php sang pdf

3. Start

Bây giờ mình sẽ chỉ cho các bạn cách sử dụng tcpdf như thế nào. Ví dụ mình đưa ra ở đây là tạo tệp PDF bao gồm có logo (ở đầu trang), một vài dòng nội dung, một hộp thông tin và vài dòng nội dung ở cuối tệp (chân trang)

Trong mã nguồn chúng ta sẽ bao gồm thêm một vài tệp PHP, tiếp theo là tạo 1 lớp nhỏ được mở rộng để tạo tiêu đề, chân trang và một vài phương thức để hỗ trợ việc tạo hộp văn bản (không làm thì được mặc định trong cấu hình

require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/tcpdf.php');

class MYPDF extends TCPDF {
	public function Header() {
		$this->setJPEGQuality(90);
		$this->Image('logo.png', 120, 10, 75, 0, 'PNG', 'http://www.finalwebsites.com');

	}
	public function Footer() {
		$this->SetY(-15);
		$this->SetFont(PDF_FONT_NAME_MAIN, 'I', 8);
		$this->Cell(0, 10, 'finalwebsites.com - PHP Script Resource, PHP classes and code for web developer', 0, false, 'C');
	}
	public function CreateTextBox($textval, $x = 0, $y, $width = 0, $height = 10, $fontsize = 10, $fontstyle = '', $align = 'L') {
		$this->SetXY($x+20, $y); // 20 = margin left
		$this->SetFont(PDF_FONT_NAME_MAIN, $fontstyle, $fontsize);
		$this->Cell($width, $height, $textval, 0, false, $align);
	}
}

Tiêu đề phương thức chỉ chứa hai chức năng duy nhất, một là để cài đặt chất lượng hình ảnh của logo và hai là để xác định vị trí của logo (kèm theo siêu liên kết) theo như đoạn mã ta viết ở trên, logo sẽ nằm ở đó

Tất cả các tọa độ được đo bằng Millimet và chiều cao cho hình ảnh được tính toán dựa trên đoạn mã. Bên trong phương thức footer chúng ta đang sử dụng một số phương thức cơ bản TCPDF để xác định vị trí, phông chữ / kiểu và các cột với đoạn văn bản ở chân trang. Phương thức thứ ba ( CreateTextBox ) chỉ là một nhóm các chức năng TCPDF giúp dễ dàng hơn để đặt một hộp số văn bản vào tài liệu PDF. Lưu ý, các biến PDF_FONT_NAME_MAIN hằng số được định nghĩa bên trong tệp cấu hình TCPDF, nằm bên trong thư mục cấu hình

tiêu đề

Đoạn mã dưới đây sẽ tạo ra một đối tượng TCPDF với các giá trị mặc định, siêu dữ liệu PDF sẽ lấy các giá trị đã được xác định sẵn, một trang mới được tạo ra và tiêu đề sẽ chứa các thông tin được tạo ra bằng một

// create a PDF object
$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document (meta) information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Olaf Lederer');
$pdf->SetTitle('TCPDF Example');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, tutorial');

// add a page
$pdf->AddPage();

// create address box
$pdf->CreateTextBox('Customer name Inc.', 0, 55, 80, 10, 10, 'B');
$pdf->CreateTextBox('Mr. Tom Cat', 0, 60, 80, 10, 10);
$pdf->CreateTextBox('Street address', 0, 65, 80, 10, 10);
$pdf->CreateTextBox('Zip, city name', 0, 70, 80, 10, 10);

// invoice title / number
$pdf->CreateTextBox('Invoice #201012345', 0, 90, 120, 20, 16);

// date, order ref
$pdf->CreateTextBox('Date: '.date('Y-m-d'), 0, 100, 0, 10, 10, '', 'R');
$pdf->CreateTextBox('Order ref.: #6765765', 0, 105, 0, 10, 10, '', 'R');

Các dòng nội dung

Bây giờ chúng ta sẽ tạo ra các thông tin về sản phẩm mà chúng ta muốn vào hóa đơn PDF. Đầu tiên chúng ta tạo ra một vài tiêu đề và sau đó sử dụng một vòng lặp để đưa ra các thông tin được lưu trong mảng $order

// list headers
$pdf->CreateTextBox('Quantity', 0, 120, 20, 10, 10, 'B', 'C');
$pdf->CreateTextBox('Product or service', 20, 120, 90, 10, 10, 'B');
$pdf->CreateTextBox('Price', 110, 120, 30, 10, 10, 'B', 'R');
$pdf->CreateTextBox('Amount', 140, 120, 30, 10, 10, 'B', 'R');

$pdf->Line(20, 129, 195, 129);

// some example data
$orders[] = array('quant' => 5, 'descr' => '.com domain registration', 'price' => 9.95);
$orders[] = array('quant' => 3, 'descr' => '.net domain name renewal', 'price' => 11.95);
$orders[] = array('quant' => 1, 'descr' => 'SSL certificate 256-Byte encryption', 'price' => 99.95);
$orders[] = array('quant' => 1, 'descr' => '25GB VPS Hosting, 200GB Bandwidth', 'price' => 19.95);

$currY = 128;
$total = 0;
foreach ($orders as $row) {
	$pdf->CreateTextBox($row['quant'], 0, $currY, 20, 10, 10, '', 'C');
	$pdf->CreateTextBox($row['descr'], 20, $currY, 90, 10, 10, '');
	$pdf->CreateTextBox('$'.$row['price'], 110, $currY, 30, 10, 10, '', 'R');
	$amount = $row['quant']*$row['price'];
	$pdf->CreateTextBox('$'.$amount, 140, $currY, 30, 10, 10, '', 'R');
	$currY = $currY+5;
	$total = $total+$amount;
}
$pdf->Line(20, $currY+4, 195, $currY+4);

Sau tiêu đề và sau danh sách các sản phẩm của hóa đơn ta tạo 1 dòng trống. Trong vòng lặp, chúng ta sử dụng biến $currY để tăng giá trị của Y thêm 5 ứng với mỗi dòng mới. Mỗi dòng được tính toán bằng PHP và tăng dần theo mỗi vòng lặp

Chân trang và thông tin

Đầu tiên, chúng ta tạo tất cả các hàng sử dụng các giá trị trong biến $total mà đã được tạo từ lúc trước. Sau đó chúng ta có MultiCell, thứ mà có thể giữ lại các điều khoản hoặc chỉ là một vài thông tin. Bạn cũng có thể sử dụng mã HTML ở ô này, ví dụ như để liên kết đến Trang các điều khoản và điều kiện của bạn

// output the total row
$pdf->CreateTextBox('Total', 20, $currY+5, 135, 10, 10, 'B', 'R');
$pdf->CreateTextBox('$'.number_format($total, 2, '.', ''), 140, $currY+5, 30, 10, 10, 'B', 'R');

// some payment instructions or information
$pdf->setXY(20, $currY+30);
$pdf->SetFont(PDF_FONT_NAME_MAIN, '', 10);
$pdf->MultiCell(175, 10, 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vestibulum sagittis venenatis urna, in pellentesque ipsum pulvinar eu. In nec nulla libero, eu sagittis diam. Aenean egestas pharetra urna, et tristique metus egestas nec. Aliquam erat volutpat. Fusce pretium dapibus tellus.', 0, 'L', 0, 1, '', '', true, null, true);

//Close and output PDF document
$pdf->Output('test.pdf', 'F');

Cuối cùng chúng ta gọi đến phương thức để đưa ra tệp PDF bên dưới tên gọi là bài kiểm tra. pdf and send this file to for browser

Đây chỉ là 1 ví dụ cho các bạn cách đơn giản để tạo ra một file PDF trực tuyến. Trước khi bạn bắt tay vào làm, bạn hãy xem các ví dụ TCPDF có sẵn trong thư viện để biết cách sử dụng các hàm và các phương thức có sẵn một cách hợp lý.