Bỏ qua để đến nội dung
getnextpdf.com

Văn bản, phông chữ và kiến thức cơ bản về trang

Trong hướng dẫn đầu tiên, bạn đã kết xuất một trang chỉ có một dòng văn bản. Lần này bạn nắm quyền kiểm soát chính trang giấy và văn bản trên đó. Bạn sẽ chọn kích thước trang, viết tiêu đề và đoạn văn, rồi định kiểu chúng bằng các phông chữ dựng sẵn của engine.

Bạn sẽ viết hai script nhỏ. Mỗi script tạo ra một tệp Portable Document Format (PDF) một trang:

  • 01-text-basics.php kết xuất một trang A4 dọc với một tiêu đề có màu, các đoạn văn được ngắt dòng và ba mẫu căn chỉnh.
  • 02-fonts.php kết xuất một trang mẫu so sánh hai họ phông chữ dựng sẵn ở nhiều cỡ chữ khác nhau.

Mọi thứ chạy chỉ với riêng gói nextpdf/core. Bạn không cần tệp phông chữ, không cần extension bổ sung và không cần mạng. Nếu bạn chưa thiết lập một dự án, hãy làm theo hướng dẫn đầu tiên trước rồi quay lại đây.

Bước 1: Định kiểu văn bản trên trang A4

Phần tiêu đề “Bước 1: Định kiểu văn bản trên trang A4”

Mỗi trang có một kích thước và một hướng. A4 là khổ giấy quốc tế phổ biến, còn Letter là khổ tương ứng ở Hoa Kỳ. Hướng trang là dọc (thẳng đứng) hoặc ngang (nằm ngang). Bạn truyền cả hai lựa chọn vào addPage() khi bắt đầu một trang.

Sau đó, ba phương thức thực hiện việc viết. setFont() chọn kiểu chữ và cỡ chữ cho văn bản theo sau. cell() viết một dòng bên trong một hộp vô hình. multiCell() ngắt văn bản dài thành số dòng tùy theo nhu cầu. Trong cả hai phương thức, chiều rộng bằng 0 nghĩa là “dùng toàn bộ khoảng cách cho tới lề phải”.

Hai lệnh gọi nữa lo phần hình thức. setTextColor() nhận các giá trị đỏ, lục và lam từ 0 đến 255, và có hiệu lực cho đến khi bạn đổi lại. Enum Alignment, một danh sách cố định các lựa chọn được đặt tên, cung cấp Left, Center, RightJustify.

Tạo 01-text-basics.php trong thư mục dự án của bạn:

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\Alignment;
use NextPDF\Contracts\Orientation;
use NextPDF\Core\Document;
use NextPDF\ValueObjects\PageSize;
@mkdir(__DIR__ . '/out');
$document = Document::createStandalone();
$document->setTitle('Text basics');
$document->addPage(PageSize::A4(), Orientation::Portrait);
// A colored heading. The values are red, green, and blue, each 0 to 255.
$document->setFont('helvetica', 'B', 20);
$document->setTextColor(30, 64, 175);
$document->cell(0, 14, 'Project kickoff notes', newLine: true);
$document->ln(4);
// Back to black for the body text.
$document->setTextColor(0, 0, 0);
$document->setFont('helvetica', '', 11);
$document->multiCell(
0,
7,
'Welcome to the second tutorial. This paragraph is written with '
. 'multiCell(), so the engine wraps the words onto as many lines '
. 'as the page width requires.',
);
$document->ln(4);
$document->multiCell(
0,
7,
'Justified text stretches the spaces so both edges line up. It is a '
. 'good fit for report bodies and other long passages.',
align: Alignment::Justify,
);
$document->ln(6);
// One line each: left, centered, and right.
$document->setFont('helvetica', 'I', 11);
$document->cell(0, 8, 'Left-aligned line', newLine: true, align: Alignment::Left);
$document->cell(0, 8, 'Centered line', newLine: true, align: Alignment::Center);
$document->cell(0, 8, 'Right-aligned line', newLine: true, align: Alignment::Right);
$document->save(__DIR__ . '/out/text-basics.pdf');
echo "Wrote out/text-basics.pdf\n";

Chạy nó bằng php 01-text-basics.php. Script in ra Wrote out/text-basics.pdf, và tệp xuất hiện trong thư mục out/ mới.

addPage(PageSize::A4(), Orientation::Portrait) đã tạo trang trước khi bất kỳ văn bản nào được viết. Thay vào đó, hãy truyền Orientation::Landscape và cùng trang đó sẽ xoay ngang. Các kích thước có tên khác, chẳng hạn PageSize::A5() hoặc PageSize::Letter(), hoạt động theo cùng một cách.

setFont('helvetica', 'B', 20) đã chọn Helvetica đậm ở cỡ 20 điểm. Điểm (pt) là đơn vị in ấn truyền thống; 72 điểm bằng một inch. Tiêu đề có màu xanh lam vì setTextColor(30, 64, 175) đang có hiệu lực khi lệnh gọi cell() viết nó. Lệnh setTextColor(0, 0, 0) kế tiếp đã chuyển về màu đen cho mọi thứ sau đó.

Hai lệnh gọi multiCell() đã tự động ngắt dòng các đoạn văn của chúng. Đoạn căn đều giãn khoảng cách giữa các từ để hai mép thẳng hàng, ngoại trừ dòng cuối cùng của đoạn. Giữa các khối, ln() di chuyển vị trí viết xuống dưới để tạo khoảng thở. Cuối cùng, save() đã dựng tệp và ghi nó vào out/.

Để biết mọi tham số mà các phương thức này chấp nhận, xem Soạn văn bản với phông chữ và căn chỉnh.

Bước 2: Chọn trong số các phông chữ dựng sẵn

Phần tiêu đề “Bước 2: Chọn trong số các phông chữ dựng sẵn”

Engine đi kèm ba họ chữ dựng sẵn: Helvetica, Times và Courier. Helvetica là kiểu chữ sans-serif, nghĩa là các chữ cái không có nét kết thúc nhỏ (chân chữ). Times là kiểu chữ serif, đọc tốt trong các đoạn dài, giống như bản in. Courier có độ rộng cố định, nên phù hợp với danh sách mã và biên lai. Vì các họ chữ này được dựng sẵn, script của bạn hoàn toàn không cần tệp phông chữ nào.

Tham số kiểu của setFont() kết hợp các cờ một chữ cái: 'B' cho đậm, 'I' cho nghiêng và 'U' cho gạch chân. Một chuỗi rỗng nghĩa là thường, và các cờ có thể kết hợp, nên 'BI' cho ra đậm nghiêng.

Các họ chữ dựng sẵn bao phủ văn bản dựa trên chữ Latin. Đối với các hệ chữ viết khác hoặc kiểu chữ thương hiệu riêng của bạn, bạn đăng ký một tệp phông chữ, như công thức Nhúng và tạo tập con phông chữ (việc tạo tập con chỉ giữ lại các ký tự bạn thực sự dùng, nên tệp vẫn nhỏ gọn) trình bày. Ma trận hỗ trợ phông chữ liệt kê mọi định dạng phông chữ mà engine chấp nhận.

Tạo 02-fonts.php cạnh script đầu tiên:

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
@mkdir(__DIR__ . '/out');
$document = Document::createStandalone();
$document->setTitle('Font sampler');
$document->addPage();
$document->setFont('helvetica', 'B', 20);
$document->cell(0, 14, 'Built-in font sampler', newLine: true);
$document->ln(4);
// Helvetica: a sans-serif face, a solid default for labels and headings.
$document->setFont('helvetica', 'B', 14);
$document->cell(0, 10, 'Helvetica', newLine: true);
foreach ([10, 12, 16] as $size) {
$document->setFont('helvetica', '', (float) $size);
$document->cell(0, $size * 0.8, "Helvetica sample at {$size}pt.", newLine: true);
}
$document->setFont('helvetica', 'BI', 12);
$document->cell(0, 9, 'Helvetica bold italic for emphasis.', newLine: true);
$document->ln(6);
// Times: a serif face that suits long, print-like passages.
$document->setFont('times', 'B', 14);
$document->cell(0, 10, 'Times', newLine: true);
foreach ([10, 12, 16] as $size) {
$document->setFont('times', '', (float) $size);
$document->cell(0, $size * 0.8, "Times sample at {$size}pt.", newLine: true);
}
$document->setFont('times', 'I', 12);
$document->cell(0, 9, 'Times italic for quotations.', newLine: true);
$document->save(__DIR__ . '/out/font-sampler.pdf');
echo "Wrote out/font-sampler.pdf\n";

Chạy nó bằng php 02-fonts.php rồi mở out/font-sampler.pdf. Bạn thấy cùng một câu mẫu thay đổi diện mạo giữa hai họ chữ và lớn dần qua ba cỡ chữ.

addPage() không có đối số đã dùng thiết lập trang mặc định ở hướng dọc, nên không phải script nào cũng cần nêu rõ kích thước. Mỗi lệnh gọi setFont() đã đổi họ chữ, kiểu hoặc cỡ đang hoạt động giữa trang, và một phông chữ vẫn có hiệu lực cho đến lệnh gọi setFont() tiếp theo.

Các vòng lặp ép kiểu cỡ chữ bằng (float)setFont() cần một số thập phân. Chiều cao dòng tỉ lệ theo cỡ chữ ($size * 0.8), nên văn bản lớn hơn có dòng cao hơn và không có gì chồng lên nhau. Hãy thử thay 'times' bằng 'courier' rồi chạy lại script để xem họ chữ thứ ba.

  • Lỗi “class not found” hoặc lỗi autoload thường nghĩa là script không tìm thấy vendor/autoload.php. Hãy chạy nó bên trong thư mục dự án có chứa vendor/.
  • Tên họ chữ gõ sai sẽ ném ra một exception nêu tên phông chữ mà nó không tìm thấy. Hãy kiểm tra chính tả: helvetica, times, courier.
  • Trung tâm khắc phục sự cố tập hợp các cách sửa phổ biến, và Phông chữ và gắn thẻ đề cập sâu về các vấn đề phông chữ.
  • Mọi exception của engine đều được ghi lại trong tài liệu tham chiếu lỗi, kèm bối cảnh mà nó mang theo và hành động khắc phục.

Giờ đây bạn có thể định hình trang, định kiểu văn bản và chọn phông chữ một cách có chủ đích. Trong hướng dẫn tiếp theo bạn đặt hình ảnh lên trang và tổ chức nội dung bằng bảng và danh sách.